Есть ли автоматический спецификатор noexcept?

Я слышал это noexcept Ключевое слово больше похоже на "оно никогда не должно вызывать исключение", а не "оно не делает".

Я не думаю, что это хорошо использовать noexcept ключевое слово, если я не уверен, что выдает исключение или нет, но noexcept Ключевое слово иногда связано с производительностью, как в конструкторе перемещения.

Поэтому я попытался использовать noexcept квалификаторы, но становится сложнее, если в определении есть несколько операторов, и это становится своего рода копией и вставкой.

template <class T>
void f(T&& t)
    noexcept(noexcept(statement_1) &&
             noexcept(statement_2) &&
             noexcept(statement_3) &&
             noexcept(statement_4) &&
             noexcept(statement_5))
{
    statement_1;
    statement_2;
    statement_3;
    statement_4;
    statement_5;
}

Я думаю, что компилятор может выяснить, состоит ли определение функции из не-бросающих операторов, так что будет проще использовать noexcept если есть выражение вроде noexcept(auto)Но, похоже, в стандарте такого нет.

Есть ли способ упростить выражение noexcept?

1 ответ

Решение

В настоящее время нет ни одного. Однако есть предложение по этой теме, в котором предлагается noexcept(auto) Синтаксис: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4473 Статус этого предложения "нуждается в дальнейшей работе", в соответствии с "Отчет о поездке Ботонд Балло: Собрание стандартов C++" в Ленексе, май 2015 г. " https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may-2015/

Дальнейшая работа. Направление предложения является многообещающим, но оно либо недостаточно хорошо проработано, либо есть определенные проблемы с одним или несколькими аспектами проекта. Автору предлагается вернуться с измененным предложением, которое более детально проработано и / или решает поставленные задачи.

...

noexcept (auto), что в основном означает "вывод noexcept-ness этой функции из noexcept-ness функций, которые она вызывает. Подобно выводу типа возврата, для этого требуется, чтобы тело функции было доступно в каждой единице перевода, которая использует функцию. Было высказано мнение, что вместе с предложением сделать спецификации исключений частью системы типов, это будет означать, что изменение тела функции может изменить тип функции (опять же, аналогично возвращению вычета типа), но люди не были слишком обеспокоены тот.

Другие вопросы по тегам