名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | language‎ | attributes
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (C++20未満)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
 
属性
(C++14)
fallthrough
(C++17)
(C++17)
(C++20)(C++20)
 

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

[編集] 構文

[[fallthrough]]

[編集] 説明

fallthrough 文を作るために空文にのみ適用できます ([[fallthrough]];)。

fallthrough 文は switch 文の中で、次に実行される文がその switch 文のための case または default ラベルを持つ文である場合にのみ使用できます。 fallthrough 文がループ内にある場合は、次の (ラベル付きの) 文はそのループの同じ繰り返しの一部でなければなりません。

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

[編集]

void f(int n) {
  void g(), h(), i();
  switch (n) {
    case 1:
    case 2:
      g();
     [[fallthrough]];
    case 3: // このフォールスルーは警告されません。
      h();
    case 4: // このフォールスルーは警告されるかもしれません。
      if(n < 3) {
          i();
          [[fallthrough]]; // OK。
      }
      else {
          return;
      }
    case 5:
      while (false) {
        [[fallthrough]]; // ill-formed。 次の文が同じ繰り返しの一部でありません。
      }
    case 6:
      [[fallthrough]]; // ill-formed。 後続の case または default ラベルがありません。
  }
}