名前空間
変種
操作

C++ 属性: noreturn (C++11 以降)

From cppreference.com
< cpp‎ | language‎ | attributes
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 
属性
(C++23)
(C++11)(C++26 まで)
(C++14)
(C++20)
(C++17)
noreturn
(C++11)
(C++20)
 

関数が戻らないことを示します。

目次

[編集] 構文

[[noreturn]]

[編集] 説明

関数が終了した後、呼び出し元の関数に制御フローを戻さないことを示します (例: アプリケーションを終了する関数、例外を投げる関数、無限ループする関数など)。この属性は、関数宣言で宣言される関数の名前にのみ適用されます。

以前に [[noreturn]] で宣言された関数が呼び出され、その呼び出しが最終的に戻る場合、動作は実行時未定義です。

いずれかの宣言がこの属性を指定する場合、関数の最初の宣言はこれを指定する必要があります。ある翻訳単位で関数が [[noreturn]] で宣言され、別の翻訳単位で同じ関数が [[noreturn]] なしで宣言された場合、プログラムは ill-formed です。診断は不要です。

[編集]

[[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 をmixinして送出する
(関数テンプレート) [編集]
非ローカルジャンプ (C++17 以降)
指定された場所にジャンプする
(関数) [編集]

[編集] 欠陥レポート

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
CWG 2924 C++11 [[noreturn]] 関数からの復帰は
未定義動作を引き起こす
実行時未定義動作となる
未定義動作

[編集] 参照

  • C++23標準 (ISO/IEC 14882:2024)
  • 9.12.10 Noreturn 属性 [dcl.attr.noreturn]
  • C++20 standard (ISO/IEC 14882:2020)
  • 9.12.9 Noreturn 属性 [dcl.attr.noreturn]
  • C++17 standard (ISO/IEC 14882:2017)
  • 10.6.8 Noreturn 属性 [dcl.attr.noreturn]
  • C++14 standard (ISO/IEC 14882:2014)
  • 7.6.3 Noreturn 属性 [dcl.attr.noreturn]
  • C++11 standard (ISO/IEC 14882:2011)
  • 7.6.3 Noreturn 属性 [dcl.attr.noreturn]

[編集] 関連項目

C ドキュメント ([[noreturn]])
English 日本語 中文(简体) 中文(繁體)