01 August 2023

C++ 核心指南目录

“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