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

来自cppreference.com
< cpp‎ | language‎ | attributes


 
 
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)
{
    // 若以 <= 0 的实参调用则行为未定义
    if (i > 0)
        throw "positive";
}
 
// void h() [[noreturn]]; // 错误:属性应用到 h 的函数类型,而非 h 自身
 
int main()
{
    try { f(); } catch(...) {}
    try { q(42); } catch(...) {}
}

[编辑] 标准库

下列标准函数声明带有 noreturn 属性:

终止函数
(C++11)
导致正常的程序终止,不进行清理
(函数) [编辑]
导致非正常的程序终止(不进行清理)
(函数) [编辑]
导致正常的程序终止并进行清理
(函数) [编辑]
导致快速程序终止,不进行完全的清理
(函数) [编辑]
异常处理失败时调用的函数
(函数) [编辑]
(C++17 中移除)
违背动态异常说明时调用的函数
(函数) [编辑]
编译器提示
标记执行的不可抵达点
(函数) [编辑]
始终抛出异常的函数
从一个 std::exception_ptr 抛出异常
(函数) [编辑]
throws the stored exception
(std::nested_exception 的公开成员函数)
抛出实参,带上混入的 std::nested_exception
(函数模板) [编辑]
非局部跳转 (C++17 起)
跳转到指定位置
(函数) [编辑]

[编辑] 参阅

_NoreturnC 文档
[[noreturn]]C 文档