CppCoreGuidelines E.12 如果通过抛出异常结束一个函数是不可能或不可接受的话,使用 noexcept 标签
01 August 2023
“Use noexcept when exiting a function because of a throw is impossible or unacceptable”
理由
出错处理更系统化、更健壮、更有效率。
例子
double compute(double d) noexcept { return log(sqrt(d <= 0 ? 1 : d)); }
此处我们知道, compute
不会抛出异常,函数内的操作不会抛出异常。这时候,如果我们把 compute
标记为 noexcept
就可以让编译器更好的进行优化,让其他程序员更好的理解这个函数,从而更好的使用这个函数。
注意
很多标准库函数是 noexcept
的,包括很多从 C 标准库继承来的 C++ 标准库函数。
例子
vector<double> munge(const vector<double>& v) noexcept { vector<double> v2(v.size()); // ... do something ... }
注意
不要传统的异常规范:E.30: Don’t use exception specifications