close
名前空間
変種

提供: cppreference.com
 
 
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
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
ラベル
label : statement
式文
expression ;
複文
{ statement... }
選択文
if
switch
繰り返し文
while
do-while
for
範囲 for(C++11)
ジャンプ文
break
continue
return
goto
宣言文
declaration ;
try ブロック
try compound-statement handler-sequence
トランザクショナルメモリ
synchronized, atomic_commit など(TM TS)
 

文は順番に実行される 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 のためのターゲット
2) switch 文の case ラベル
3) switch 文の default ラベル

属性の並び 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以上)
1) if
2) else 節付きの if
3) switch

繰り返し文

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

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以上)
1) while ループ
2) do-while ループ
3) for ループ
4) 範囲 for ループ

ジャンプ文

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

attr(オプション) break ; (1)
attr(オプション) continue ; (2)
attr(オプション) return expression(オプション) ; (3)
attr(オプション) return braced-init-list ; (4) (C++11以上)
attr(オプション) goto identifier ; (5)
1) break
2) continue
3) オプショナルな式付きの return
4) リスト初期化を用いた return
5) goto

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

宣言文

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

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

try ブロック

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

attr(オプション) try compound-statement handler-sequence (1)
1) 詳細は try/catch を参照してください。

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)
1) synchronized ブロック、すべての synchronized ブロックは単一の全順序で実行されます
2) 例外で中断する atomic ブロック
3) 例外でロールバックする atomic ブロック
4) 例外でコミットする atomic ブロック
(TM TS)

関連項目