C++ 屬性: noreturn (C++11 起)
來自 cppreference.com
表示函式不會返回。
目錄 |
[編輯] 語法
[[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++11 中已廢棄)(C++17 中已移除) |
動態異常規範被違反時呼叫的函式 (函式) |
編譯器提示 | |
(C++23) |
標記不可達的執行點 (函式) |
總是丟擲異常的函式 | |
(C++11) |
從 std::exception_ptr 丟擲異常 (函式) |
丟擲儲存的異常 ( std::nested_exception 的公共成員函式)
| |
(C++11) |
丟擲其引數並混入 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]] |