Помогает ли добавление `noexcept (false)` коду?

Недавно в моем коде я явно писал noexcept(false) в функциях, которые я знаю, генерируются исключения, в основном для людей, читающих код. Однако мне интересно, влияет ли это на поведение моего кода или то, как компилятор его интерпретирует. Есть ли какая-то разница?

Примечание: я знаю, что деструкторы неявно отсутствуют, и что вы должны указать noexcept(false) чтобы изменить это, я задаюсь вопросом о других функциях.

9

Решение

Не имеет спецификатора исключения и явно указывает noexcept(false) эквивалентны, см. §15.4 / 12:

Функция без спецификации исключений или со спецификацией исключений в форме noexcept(constant-expression) где константное выражение дает false позволяет все исключения.

Поэтому компилятор не должен различать их при рассмотрении исключений.


Что еще более важно, вам нет нужды noexcept(false) к вашим функциям. Как разработчик C ++, вы должны предполагать, что каждая функция выбрасывает по умолчанию (именно поэтому стандарт занимает такую ​​позицию), поэтому вы не добавляете новую информацию, выписывая ее; это пустая трата времени для всех.

Скорее, отметьте особый случай, когда функция определенно не бросает с noexceptи отметьте случаи, когда функция может бросить в зависимости от некоторых условий с noexcept(condition),

Если ваша функция намеренно является источником какого-то исключения Eнапишите это в своей документации.

11

Другие решения

В своей книге Больше исключительных C ++, Херб Саттер имеет следующий фрагмент (стр. 130):

Правильный ответ на Пример 19-1 намного проще:

// Example 19-4: The right solution
//
T::~T() /* throw() */
{
// ... code that won't throw ...
}

Пример 19-4 демонстрирует, как принять решение о дизайне вместо вафли.

Обратите внимание, что throw() спецификация исключений «ничего не выбрасывает»
это только комментарий. Это стиль, который я выбрал, чтобы следовать, частично
потому что оказывается, что спецификации исключений дают намного меньше
выгода, чем они стоят
. Независимо от того, решите ли вы на самом деле написать спецификацию, это вопрос вкуса.

(акцент мой)

Итак, я чувствую, что должен указать, что один из ведущих экспертов в C ++-безопасном коде, кажется, против всей концепции добавления спецификаций исключений для использования компилятором (но все же оставляя это в коде для понимания программистами) ,

Просто подумал, что это может быть интересная информация …

-1

По вопросам рекламы [email protected]