命名空间
变体
操作

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

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

表示函数不会返回。

目录

[编辑] 语法

[[noreturn]]

[编辑] 解释

表示函数完成后不会将控制流返回给调用函数(例如,终止应用程序、抛出异常、无限循环等的函数)。此属性仅适用于函数声明中声明的函数名称。

如果调用了先前使用 [[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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
CWG 2924 C++11 [[noreturn]] 函数返回
将导致未定义行为
导致运行时-
未定义行为

[编辑] 参考资料

  • 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]]