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.
noexcept是C++11引入的关键字,用于声明函数不会抛出异常,允许编译器进行优化。它也可作为运算符判断表达式是否可能抛出异常。然而,如果noexcept函数内部调用了可能抛出异常的函数,仍可能导致异常发生。示例代码展示了noexcept的使用和限制。
5529

被折叠的 条评论
为什么被折叠?



