我听说这个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 表达式?