文
文は順番に実行される C++ プログラムの断片です。 あらゆる関数の本体は文の並びです。 例えば、
int main(){int n =1;// 宣言文 n = n +1;// 式文std::cout<<"n = "<< n <<'\n';// 式文return0;// return 文}
C++ には以下の種類の文があります。
目次 |
[編集]ラベル
あらゆる文は、文そのものの前にラベルとコロンを置くことによって、ラベル付けすることができます。
attr(オプション)identifier: statement | (1) | ||||||||
attr(オプション)case constexpr: statement | (2) | ||||||||
attr(オプション)default : statement | (3) | ||||||||
属性の並び attr はラベルの直前 (この場合、属性はそのラベルに適用されます) または任意の文そのものの直前 (この場合、属性は文全体に適用されます) に現れることができます。 ひとつの文に複数のラベルを付けることができます。 ラベルは (そしてラベルのみが) 関数スコープを持ちます。 非修飾名の名前探索はラベルを無視します。 ラベルはプログラム内の任意の他のエンティティと同じ名前を持つことができます。
[編集]式文
式にセミコロンが続いたものは文です。
attr(オプション)expression(オプション); | (1) | ||||||||
attr(C++11) | - | オプショナルな任意個の属性の並び |
expression | - | 式 |
一般的な C++ プログラムのほとんどの文は、代入や関数呼び出しなどの式文です。
式のない式文は空文と呼ばれます。 これは for や while ループに空の本体を与えるためによく使用されます。 また複文の終わりにラベルを置くためにも使用することができます。
[編集]複文
複文、またはブロックは、波括弧で囲まれた文の並びです。
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;}
[編集]選択文
選択文はいくつかの制御のフローからひとつを選択します。
| (C++17未満) | |||||||||||||||||||||||||||||||||||||||||||||||||
| (C++17以上) |
[編集]繰り返し文
繰り返し文は何らかのコードを繰り返し実行します。
attr(オプション)while ( condition) statement | (1) | ||||||||
attr(オプション)do statementwhile ( expression) ; | (2) | ||||||||
attr(オプション)for ( init-statementcondition(オプション); 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) | ||||||||
[編集]try ブロック
try ブロックは他の文を実行するときに投げられる例外をキャッチする能力を提供します。
attr(オプション)try compound-statementhandler-sequence | (1) | ||||||||
atomic および synchronized ブロックatomic および synchronized ブロックはトランザクショナルメモリを実装するために使用されます。
1)synchronized ブロック、すべての synchronized ブロックは単一の全順序で実行されます 2) 例外で中断する atomic ブロック 3) 例外でロールバックする atomic ブロック 4) 例外でコミットする atomic ブロック | (TM TS) |
[編集]関連項目
文 の C言語リファレンス |