Я использую исключения C++ в своем коде вместо возвращаемых значений для указания ошибок, поэтому мой код должен быть безопасным для исключений. Поэтому я добавляю спецификацию исключения в качестве комментариев к объявлениям моей функции. Например:Спецификации исключений в качестве комментариев при объявлении функций
// Does x and y. strong-guarantee
void XandY();
// Checks something.
bool CheckSomething() noexcept;
Это хорошая практика?
Кроме того, если я оцениваю свой код для выполнения этих спецификаций, должен ли я иметь в виду только исключения на C++, а также исключения SEH, такие как разыменование nullptr, переполнение или деление на нулевые исключения?
Предположим, я использую стороннюю библиотеку, которая никогда не бросает исключения на C++, но может генерировать исключения SEH. Может ли моя функция, которая полагается на функции этой библиотеки, никогда не перестанет существовать?
void MyFunction() noexcept // <-- Is noexcept viable?
{
OtherFunction(); // may throw SEH exception
}
'SEH' - это термин Windows, но' noexcept' не является ключевым словом Visual Studio. Не могли бы вы указать свой компилятор и ОС? – Dialecticus
Вы первое замечание отлично, это важная информация о декларации, которая не может быть указана кодом. –
Я использую C++ 11 для Windows, но я думаю, что есть что-то похожее на SEH на другие ОС. –