Я слышал, что ключевое слово 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?