◐ Shell
clean mode source ↗

文 - cppreference.com

提供: cppreference.com

文は順番に実行される C++ プログラムの断片です。 あらゆる関数の本体は文の並びです。 例えば、

int main()
{
    int n = 1;                        // 宣言文
    n = n + 1;                        // 式文
    std::cout << "n = " << n << '\n'; // 式文
    return 0;                         // return 文
}

C++ には以下の種類の文があります。

1) 式文

2) 複文

3) 選択文

4) 繰り返し文

5) ジャンプ文

6) 宣言文

7) try ブロック

8) atomic および synchronized ブロック (TM TS)

ラベル

あらゆる文は、文そのものの前にラベルとコロンを置くことによって、ラベル付けすることができます。

attr(オプション) identifier : statement (1)
attr(オプション) case constexpr : statement (2)
attr(オプション) default : statement (3)

1) goto のためのターゲット

属性の並び attr はラベルの直前 (この場合、属性はそのラベルに適用されます) または任意の文そのものの直前 (この場合、属性は文全体に適用されます) に現れることができます。 ひとつの文に複数のラベルを付けることができます。 ラベルは (そしてラベルのみが) 関数スコープを持ちます。 非修飾名の名前探索はラベルを無視します。 ラベルはプログラム内の任意の他のエンティティと同じ名前を持つことができます。

式文

式にセミコロンが続いたものは文です。

attr(オプション) expression(オプション) ; (1)
attr(C++11) - オプショナルな任意個の属性の並び
expression -

一般的な C++ プログラムのほとんどの文は、代入や関数呼び出しなどの式文です。

式のない式文は空文と呼ばれます。 これは forwhile ループに空の本体を与えるためによく使用されます。 また複文の終わりにラベルを置くためにも使用することができます。

複文

複文、またはブロックは、波括弧で囲まれた文の並びです。

attr(オプション) { statement...(オプション) } (1)

ひとつの文が期待されるけれども複数の文を順に実行する必要があるとき (例えば if 文やループなどで)、複文が使用できます。

if (x > 5)          // if 文の始まり
{                   // ブロックの始まり
    int n = 1;      // 宣言文
    std::cout << n; // 式文
}                   // ブロックの終わり、 if 文の終わり

それぞれの複文はそれ自身のブロックスコープを持ちます。 ブロック内部で宣言された変数は閉じ波括弧のところで逆順に破棄されます。

int main()
{
    {                                // ブロックの始まり
        std::ofstream f("test.txt"); // 宣言文
        f << "abc\n";                // 式文
    }                                // ブロックの終わり、 f はフラッシュされ閉じられます
    std::ifstream f("test.txt"); 
    std::string str;
    f >> str; 
}

選択文

選択文はいくつかの制御のフローからひとつを選択します。

attr(オプション) if ( condition ) statement (1)
attr(オプション) if ( condition ) statement else statement (2)
attr(オプション) switch ( condition ) statement (3)
(C++17未満)
attr(オプション) if constexpr(オプション) ( init-statement(オプション) condition ) statement (1)
attr(オプション) if constexpr(オプション) ( init-statement(オプション) condition ) statement else statement (2)
attr(オプション) switch ( init-statement(オプション) condition ) statement (3)
(C++17以上)

2) else 節付きの if

繰り返し文

繰り返し文は何らかのコードを繰り返し実行します。

attr(オプション) while ( condition ) statement (1)
attr(オプション) do statement while ( expression ) ; (2)
attr(オプション) for ( init-statement condition(オプション) ; expression(オプション) ) statement (3)
attr(オプション) for ( for-range-decl : for-range-init ) statement (4) (C++11以上)

ジャンプ文

ジャンプ文はフロー制御を無条件に転送します。

attr(オプション) break ; (1)
attr(オプション) continue ; (2)
attr(オプション) return expression(オプション) ; (3)
attr(オプション) return braced-init-list ; (4) (C++11以上)
attr(オプション) goto identifier ; (5)

ノート: すべてのジャンプ文について、ループ外への転送、ブロック外への転送、または自動記憶域期間を持つ初期化済み変数を超えて戻る転送は、転送元地点のスコープ内にはあるけれども転送先地点のスコープ内にはない自動記憶域期間を持つオブジェクトの破棄を発生させます。 複数のオブジェクトが初期化された場合、破棄の順序は初期化の順序の逆です。

宣言文

宣言文はブロックにひとつ以上の識別子を導入します。

block-declaration (1)

1) 詳細は宣言および初期化を参照してください。

try ブロック

try ブロックは他の文を実行するときに投げられる例外をキャッチする能力を提供します。

attr(オプション) try compound-statement handler-sequence (1)

atomic および synchronized ブロック

atomic および synchronized ブロックはトランザクショナルメモリを実装するために使用されます。

synchronized compound-statement (1) (TM TS)
atomic_noexcept compound-statement (2) (TM TS)
atomic_cancel compound-statement (3) (TM TS)
atomic_commit compound-statement (4) (TM TS)
(TM TS)

関連項目