Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Спецификация исключений C++

#cpp #исключения


Как сейчас правильно указывать, что функция выбрасывает исключения? Писать throw(...)
или перечислять возможные исключения или вообще ничего не писать?

И еще вопрос: что указывается в скобках после noexcept?
    


Ответы

Ответ 1



Если функция выбрасывает исключения - то ничего не писать. (Или можно эквивалентно написать noexcept(false)). Что указывается в скобках noexcept зависит от того, о каком noexcept вы говорите. Есть оператор noexcept, а есть спецификатор noexcept. Оператор noexcept проверяет noexcept-статус выражения. Это оператор времени компиляции. В качестве операнда указывается выражение, чей noexcept-статус вы хотите узнать. Оператор на стадии компиляции вернет true или false. Спецификатор noexcept наоборот назначает noexcept-статус функции. Он декларирует, является ли данная функция noexcept или не является. Просто noexcept говорит, что функция является noexcept. А в варианте с булевским операндом noexcept-статус определяется значением булевского выражения. Например, в следующем примере используется как оператор noexcept, так и спецификатор noexcept void bar() noexcept(noexcept(foo())); ^ ^ | | | оператор спецификатор Функция bar() в результате получит тот же noexcept-статус, что и функция foo().

Комментариев нет:

Отправить комментарий