C++ attribute: noreturn (since C++11)
関数が戻らないことを示します。
目次 |
構文
[
[
noreturn
]
]
|
|||||||||
説明
関数が終了後に制御フローを呼び出し元の関数に戻さないことを示します(例:アプリケーションを終了する関数、例外をスローする関数、無限ループする関数など)。この属性は、関数宣言内で宣言されている関数名にのみ適用されます。
以前に [ [ 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++11)
|
完全なクリーンアップなしでプログラムを高速終了させる
(関数) |
|
例外処理が失敗したときに呼び出される関数
(関数) |
|
|
(C++11で非推奨)
(C++17で削除)
|
動的例外仕様が違反されたときに呼び出される関数
(関数) |
コンパイラヒント |
|
|
(C++23)
|
到達不能な実行ポイントをマークする
(関数) |
常に例外を送出する関数 |
|
|
(C++11)
|
std::exception_ptr
から例外を送出する
(関数) |
|
保存された例外を送出する
(
std::nested_exception
の公開メンバ関数)
|
|
|
(C++11)
|
引数を
std::nested_exception
と共に送出する
(関数テンプレート) |
非ローカルジャンプ (C++17以降) |
|
|
指定された位置にジャンプする
(関数) |
|
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| CWG 2924 | C++11 |
returning from a
[
[
noreturn
]
]
function
would result in undefined behavior |
results in runtime-
undefined behavior |
参考文献
- 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 ドキュメント
for
_Noreturn
|
|
|
C ドキュメント
for
[[noreturn]]
|