使用noexcept表明函数或操作不会发生异常。如果noexcept函数向外抛出了异常,程序会直接终止,该函数内部会调用std::abort()终止程序。
noexcept有两种用法:
用法一:在函数声明后加上 noexcept 关键字,如下所示:
void Stop_propagation_of_exceptions() noexcept;
用法二:接受一个常量表达式作为参数,如下所示:
void test() noexcept(常量表达式);
一个例子:
#include <iostream>
using namespace std;
void fun() noexcept;
void throw_exception() {
throw 1;
}
//继续向上抛出异常
void propagation_exceptions()
{
throw_exception();
}
//阻止异常的传播
void Stop_propagation_of_exceptions() noexcept
{
throw_exception();
}
int main(void) {
try {
propagation_exceptions();
}
catch (...) {
cout << "Throw is not blocked" << endl;
}
try {
Stop_propagation_of_exceptions();
}
catch (...) {
cout << "Found throw1" << endl;
}
return 0;
}
该例子中propagation_exceptions函数调用后会将异常继续向上抛出,而Stop_propagation_of_exceptions函数因为声明了noexcept则会立即中止程序。