Спецификации исключений в виде комментариев при объявлениях функций

Я использую исключения 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
}

2

Решение

Спецификация исключений C ++ работает только с исключениями C ++, но не с исключениями Windows (SEH). В частности, исключения Windows не могут быть перехвачены с помощью C ++. try-catch блок. Большинство условий, которые вызывают исключение Windows, классифицируются стандартом как неопределенные или определяемые реализацией поведения.

1

Другие решения


По вопросам рекламы [email protected]