名前空間
変種
操作

C++ 属性: fallthrough (C++17 以降)

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)
fallthrough
(C++17)
(C++20)
(C++17)
(C++11)
(C++20)
 

前の case ラベルからのフォールスルーが意図的であり、フォールスルーについて警告するコンパイラによって診断されるべきではないことを示します。

目次

[編集] 構文

[[fallthrough]]

[編集] 説明

null ステートメントにのみ適用して、フォールスルー ステートメント ([[fallthrough]];) を作成できます。

フォールスルー ステートメントは、switch ステートメント内でのみ使用できます。この場合、次に実行されるステートメントは、その switch ステートメントの case または default ラベルを持つステートメントです。フォールスルー ステートメントがループ内にある場合、次に続く (ラベル付きの) ステートメントは、そのループの同じイテレーションの一部である必要があります。

[編集]

void f(int n)
{
    void g(), h(), i();
 
    switch (n)
    {
        case 1:
        case 2:
            g();
            [[fallthrough]];
        case 3: // no warning on fallthrough
            h();
        case 4: // compiler may warn on fallthrough
            if (n < 3)
            {
                i();
                [[fallthrough]]; // OK
            }
            else
            {
                return;
            }
        case 5:
            while (false)
            {
                [[fallthrough]]; // ill-formed: next statement is not
                                 //             part of the same iteration
            }
        case 6:
            [[fallthrough]]; // ill-formed, no subsequent case or default label
    }
}

[編集] 欠陥レポート

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

DR 適用対象 公開された動作 正しい動作
CWG 2406 C++17 [[fallthrough]] はループ内に現れる可能性がある
ターゲットの switch ステートメント内にネストされている
禁止された

[編集] 参照

  • C++23標準 (ISO/IEC 14882:2024)
  • 9.12.6 フォールスルー属性 [dcl.attr.fallthrough]
  • C++20 standard (ISO/IEC 14882:2020)
  • 9.12.5 フォールスルー属性 [dcl.attr.fallthrough]
  • C++17 standard (ISO/IEC 14882:2017)
  • 10.6.5 フォールスルー属性 [dcl.attr.fallthrough]

[編集] 関連項目

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