命名空间
变体
操作

C++ 属性: noreturn (自 C++11 起)

来自 cppreference.com
< cpp‎ | 语言‎ | 属性
 
 
C++ 语言
 
 
属性
(C++23)
(C++14)
(C++20)
(C++17)
noreturn
(C++11)
(C++20)
 

指示函数不返回值。

内容

[编辑] 语法

[[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++17 中已删除)
当违反动态异常规范时调用的函数
(函数) [编辑]
编译器提示
标记不可到达的执行点
(函数) [编辑]
总是抛出异常的函数
std::exception_ptr 中抛出异常
(函数) [编辑]
抛出存储的异常
(std::nested_exception 的公共成员函数)
使用 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]]