名稱空間
變體
操作

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

來自 cppreference.com
< 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]]