C++ 属性:noreturn (C++11 起)
来自cppreference.com
< cpp | language | attributes
指示函数不返回。
语法
[[noreturn]]
|
|||||||||
解释
指示函数不返回。
此属性仅应用到函数声明中正在声明的函数名。若拥有此属性的函数实际上返回,则行为未定义。
若函数的任何声明指定此属性,则其首个声明必须指定它。若函数在一个翻译单元中声明为带 [[noreturn]]
属性,而同一函数在另一翻译单元中声明为不带 [[noreturn]]
属性,则程序非良构;不要求诊断。
示例
运行此代码
[[ noreturn ]] void f() { throw "error"; // OK } void q [[ noreturn ]] (int i) { // 若以 <= 0 的参数调用则行为未定义 if (i > 0) { throw "positive"; } } // void h() [[noreturn]]; // 错误:属性应用到 h 的函数类型,而非 h 自身
标准库
下列标准函数声明带有 noreturn
属性:
终止函数 | |
(C++11) |
导致正常的程序终止,不进行清理 (函数) |
导致非正常的程序终止(不进行清理) (函数) | |
导致正常的程序终止并进行清理 (函数) | |
(C++11) |
导致快速程序终止,不进行完全的清理 (函数) |
异常处理失败时调用的函数 (函数) | |
(C++17 中移除) |
违背动态异常说明时调用的函数 (函数) |
始终抛出异常的函数 | |
(C++11) |
从一个 std::exception_ptr 抛出异常 (函数) |
抛出其所存储的异常 ( std::nested_exception 的公开成员函数)
| |
(C++11) |
抛出实参,带上混入的 std::nested_exception (函数模板) |
非局部跳转 (C++17 起) | |
跳转到指定位置 (函数) |