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

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

Я не думаю, что будет полезно использовать ключевое слово noexcept, если я не уверен, что оно вызывает исключение или нет, но ---- +: = 2 =: + ---- иногда связано с производительностью, как в конструкторе перемещения.

Поэтому я попытался использовать квалификаторы 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?

24 голоса | спросил Inbae Jeong 26 Maypm15 2015, 14:07:39

1 ответ


0

В настоящее время их нет. Однако есть предложение по этой теме, в котором предлагается синтаксис 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 -в-Lenexa-май-2015 /

  

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

...

  

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

ответил Ilya Popov 9 J0000006Europe/Moscow 2015, 12:10:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132