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

244
28 февраля 2017, 18:11

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

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

Answer 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().

READ ALSO
Flex - не понятное предупреждение

Flex - не понятное предупреждение

Я использую генератор лексических анализаторов Flex

245
[C++]Проблема при импорта DLL [требует правки]

[C++]Проблема при импорта DLL [требует правки]

Не могу испольнить этот код на C++

251
Инвертирование числа

Инвертирование числа

Программа должна инвертировать число, но почему-то этого не происходит

236