for
ステートメント (C++)
条件が偽 (false) になるまでステートメントを繰り返し実行します。 範囲ベースの for
ステートメントの詳細については、「範囲ベースの for
ステートメント (C++)」を参照してください。 C++/CLI for each
ステートメントの詳細については、次in
を参照してくださいfor each
。
構文
for (
init-expression
;
cond-expression
;
loop-expression
)
statement
解説
指定された回数だけ実行する必要のあるループの構築に for
ステートメントを使用します。
次の表に示すように、for
ステートメントは 3 つのオプション部分から構成されます。
for ループ要素
構文の名前 | 実行タイミング | 説明 |
---|---|---|
init-expression |
for ステートメントの他の要素の前。init-expression は 1 回だけ実行されます。 その後、制御は cond-expression に渡されます。 |
ループ インデックスを初期化するためによく使用されます。 式または宣言を含めることができます。 |
cond-expression |
最初のイテレーションを含む statement の各イテレーションの実行前。 statement は、cond-expression が true (0 以外) に評価された場合にのみ実行されます。 |
整数型に評価される式、または整数型へのあいまいでない変換が行われるクラス型。 通常、for ループの終了条件をテストするために使用します。 |
loop-expression |
statement の各イテレーションの終了時。 loop-expression の実行後に cond-expression が実行されます。 |
通常、ループ インデックスのインクリメントに使用します。 |
次の例では、for
ステートメントを使用するさまざまな方法を示しています。
#include <iostream>
using namespace std;
int main() {
// The counter variable can be declared in the init-expression.
for (int i = 0; i < 2; i++ ){
cout << i;
}
// Output: 01
// The counter variable can be declared outside the for loop.
int i;
for (i = 0; i < 2; i++){
cout << i;
}
// Output: 01
// These for loops are the equivalent of a while loop.
i = 0;
while (i < 2){
cout << i++;
}
// Output: 01
}
init-expression
と loop-expression
には、コンマで区切った複数のステートメントを含めることができます。 次に例を示します。
#include <iostream>
using namespace std;
int main(){
int i, j;
for ( i = 5, j = 10 ; i + j < 20; i++, j++ ) {
cout << "i + j = " << (i + j) << '\n';
}
}
/* Output:
i + j = 15
i + j = 17
i + j = 19
*/
loop-expression
はインクリメントまたはデクリメントするか、他の方法で変更することができます。
#include <iostream>
using namespace std;
int main(){
for (int i = 10; i > 0; i--) {
cout << i << ' ';
}
// Output: 10 9 8 7 6 5 4 3 2 1
for (int i = 10; i < 20; i = i+2) {
cout << i << ' ';
}
}
// Output: 10 12 14 16 18
for
ループは、statement
内の break
、return、または goto
(for
ループの外側のラベルが付いたステートメントに対するもの) が実行されると終了します。 for
ループ内の continue
ステートメントは、現在のイテレーションのみを終了します。
cond-expression
を省略した場合は true
と見なされ、statement
内に break
、return
、または goto
がないと for
ループは終了しません。
通常、for
ステートメントの 3 種類のフィールドは初期化、終了のテスト、インクリメントのためによく使用されますが、これらの使用に限定されません。 たとえば、次のコードは、数値 0 ~ 4 を出力します。 この場合、statement
は null ステートメントです。
#include <iostream>
using namespace std;
int main()
{
int i;
for( i = 0; i < 5; cout << i << '\n', i++){
;
}
}
for
ループと C++ 標準
C++ 標準では for
ループの終了後に for
ループ内で宣言された変数がスコープ外に出ることを通知します。 次に例を示します。
for (int i = 0 ; i < 5 ; i++) {
// do something
}
// i is now out of scope under /Za or /Zc:forScope
既定では、ループ/Ze
内で宣言された変数は、ループのfor
外側のスコープが終了するまでfor
スコープ内で再メインされます。
/Zc:forScope
を使用すると、for ループで宣言された変数の標準動作を指定 /Za
する必要はありません。
また、次のように、/Ze
の下で変数を再宣言するために for
ループのスコープの相違点を使用することも可能です。
// for_statement5.cpp
int main(){
int i = 0; // hidden by var with same name declared in for loop
for ( int i = 0 ; i < 3; i++ ) {}
for ( int i = 0 ; i < 3; i++ ) {}
}
このビヘイビアーにより、for
ループで宣言された変数の標準ビヘイビアーがより正確に模倣されます。その場合、ループの終了後にスコープ外に出るために for
ループで宣言された変数が必要です。 変数が for
ループで宣言される場合、コンパイラは for
ループの外側のスコープでローカル変数に内部的にレベルを上げます。 既に同じ名前のローカル変数がある場合でも、レベルが上げられます。
関連項目
繰り返しステートメント
キーワード
while
ステートメント (C++)
do-while
ステートメント (C++)
範囲ベース for
のステートメント (C++)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示