Как бороться с libstdc ++, выбрасывающим исключение через границы выполнения - PullRequest
0 голосов
/ 28 октября 2019

Согласно ЭТОЙ странице , многие функции std :: string могут выдавать исключения в реализации libstdc ++. Я не могу изменить реализацию libstdc ++, и было бы слишком дорого переключаться на другие библиотеки. Моя текущая цель - сделать мой код, который интенсивно использует std :: string, совместимым со стандартом кодирования SEI CERT C ++. Мои вопросы:

  1. Как обойти эту проблему, чтобы libstdc ++ не перебрасывал границы выполнения?
  2. Я думаю, что независимо от того, на какую стандартную реализацию библиотеки я переключаюсь, я все еще могув конечном итоге возникла эта проблема, потому что выбрасывание исключений из библиотеки - такая распространенная и, пожалуй, разумная вещь. Значит ли это, что я всегда буду сталкиваться с такой проблемой? Это так просто на практике, что люди не особо заботятся, или это просто компромисс, который люди заставляют использовать исключение для обработки ошибок?

Спасибо!

1 Ответ

2 голосов
/ 28 октября 2019

Этот стандарт кодирования C ++ уже запрещает вам передавать типы нестандартной компоновки через границы выполнения, и std::string является таким типом. Часть исключения не усугубляет проблему.

Как правило, разумное решение состоит в том, чтобы не иметь «границ выполнения» в вашей программе. Вместо этого вы компилируете всю программу, используя один ABI и одну стандартную библиотеку.

Если у вас есть механизм плагинов, вы обычно создаете узкий API для этого интерфейса плагинов. В этом интерфейсе вы можете даже придерживаться C ABI, поэтому автор плагина не ограничен C ++. И поскольку это C ABI, вы должны убедиться, что ваши исключения C ++ не передаются плагину. std::string здесь не проблема, вы работаете с char const*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...