Как сейчас правильно указывать, что функция выбрасывает исключения? Писать 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()
Комментариев нет:
Отправить комментарий