C++ 属性: noreturn (自 C++11 起)
来自 cppreference.com
指示函数不返回值。
内容 |
[编辑] 语法
[[noreturn]]
|
|||||||||
[编辑] 解释
指示函数在完成执行后不会将控制流返回调用函数(例如,终止应用程序、抛出异常、无限循环等的函数)。
此属性仅适用于函数声明中声明的函数名称。如果具有此属性的函数实际返回,则行为未定义。
如果任何声明指定了此属性,则函数的第一个声明必须指定此属性。如果在某个翻译单元中用 [[noreturn]]
声明一个函数,而在另一个翻译单元中用 [[noreturn]]
声明同一个函数,则程序格式错误;不需要诊断。
[编辑] 示例
运行这段代码
[[noreturn]] void f() { throw "error"; // OK } void q [[noreturn]] (int i) { // behavior is undefined if called with an argument <= 0 if (i > 0) throw "positive"; } // void h() [[noreturn]]; // error: attribute applied to function type of h, not h itself int main() { try { f(); } catch(...) {} try { q(42); } catch(...) {} }
[编辑] 标准库
以下标准函数用 noreturn
属性声明
终止函数 | |
(C++11) |
导致正常程序终止,不进行清理 (函数) |
导致程序异常终止(未清理) (函数) | |
导致程序正常终止,并进行清理 (函数) | |
(C++11) |
导致程序快速终止,但未完全清理 (函数) |
异常处理失败时调用的函数 (函数) | |
(C++11 中已弃用)(C++17 中已删除) |
当违反动态异常规范时调用的函数 (函数) |
编译器提示 | |
(C++23) |
标记不可到达的执行点 (函数) |
总是抛出异常的函数 | |
(C++11) |
从 std::exception_ptr 中抛出异常 (函数) |
抛出存储的异常 ( std::nested_exception 的公共成员函数)
| |
(C++11) |
使用 std::nested_exception 混合抛出其参数 (函数模板) |
非局部跳转 (自 C++17 起) | |
跳转到指定位置 (函数) |
[编辑] 参考文献
- C++23 标准 (ISO/IEC 14882:2024)
- 9.12.10 Noreturn 属性 [dcl.attr.noreturn]
- C++20 标准 (ISO/IEC 14882:2020)
- 9.12.9 Noreturn 属性 [dcl.attr.noreturn]
- C++17 标准 (ISO/IEC 14882:2017)
- 10.6.8 Noreturn 属性 [dcl.attr.noreturn]
- C++14 标准 (ISO/IEC 14882:2014)
- 7.6.3 Noreturn 属性 [dcl.attr.noreturn]
- C++11 标准 (ISO/IEC 14882:2011)
- 7.6.3 Noreturn 属性 [dcl.attr.noreturn]
[编辑] 另请参见
C 文档 用于 _Noreturn
| |
C 文档 用于
[[noreturn]] |