5. noexcept 说明符

C++11 中提供了 noexcept 关键字用于异常相关的声明和运算。

noexcept 关键字有两个作用:

  1. 作为说明符,声明函数(或成员函数)一定不会抛出异常(有利于编译器优化)。
  2. 作为运算符,在编译期检查表达式是否可能抛出异常,返回 bool 值。

1. 作为说明符的语法:

void 函数名() noexcept {
    // 如果这里真的抛出了异常,程序会直接调用 std::terminate() 终止
}

如:

void may_throw() { throw 1; }  // 可能抛出异常的函数
void no_throw() noexcept {}  // 一定不抛出异常的函数

2. 作为运算符的语法:

noexcept(表达式)

如:

cout << noexcept(may_throw()) << endl;  // 打印:false
cout << noexcept(no_throw()) << endl;  // 打印:true
cout << noexcept(1 + 2) << endl;  // true(基本运算不会抛异常)