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

< 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++17 中移除)
违背动态异常说明时调用的函数
(函数)
始终抛出异常的函数
从一个 std::exception_ptr 抛出异常
(函数)
抛出其所存储的异常
(std::nested_exception 的公开成员函数)
抛出实参,带上混入的 std::nested_exception
(函数模板)
非局部跳转 (C++17 起)
跳转到指定位置
(函数)

参阅