noexcept
是 C++11 引入的一个关键字,表示函数不会抛出异常。当一个函数在声明时带有 noexcept
关键字,编译器会在编译期确定该函数是否会抛出异常。如果该函数确实不会抛出异常,编译器会进行优化,这可能会带来性能提升。
noexcept
还可以用作运算符,返回一个布尔值,指示一个表达式是否可以抛出异常。例如,noexcept(expr)
会在编译期间返回一个布尔值,告诉编译器 expr
是否会抛出异常。
需要注意的是,noexcept
并不代表函数不会抛出异常,而只是表示函数确实不会抛出异常。如果在 noexcept
函数中调用了可能会抛出异常的函数,那么该函数仍然可能会抛出异常。
示例代码:
void f1() noexcept; // f1 不会抛出异常
void f2() noexcept(true); // 等价于 f1,不会抛出异常
void f3() noexcept(false); // f3 可能会抛出异常
void g1() { throw "exception"; }
void g2() noexcept { g1(); } // 编译错误:尝试在 noexcept 函数中调用可能抛出异常的函数
更多关于 noexcept
关键字的知识详见参考资料[1]。
参考资料:
- [1] C++ Reference: noexcept operator.