Как сейчас правильно указывать, что функция выбрасывает исключения? Писать throw(...)
или перечислять возможные исключения или вообще ничего не писать?
И еще вопрос: что указывается в скобках после noexcept
?
Если функция выбрасывает исключения - то ничего не писать. (Или можно эквивалентно написать 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()
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок