for ステートメント (C++)for Statement (C++)

条件が偽 (false) になるまでステートメントを繰り返し実行します。Executes a statement repeatedly until the condition becomes false. 範囲ベースの for ステートメントについては、次を参照してください。ステートメント (C++) の範囲に基づくします。For information on the range-based for statement, see Range-based for Statement (C++).

構文Syntax

for ( init-expression ; cond-expression ; loop-expression )
    statement;

RemarksRemarks

使用して、ステートメントを指定した回数だけを実行する必要がありますのあるループを構築します。Use the for statement to construct loops that must execute a specified number of times.

次の表に示すように、次の 3 つの省略可能な部分のステートメントで構成されます。The for statement consists of three optional parts, as shown in the following table.

for ループ要素for Loop Elements

構文の名前Syntax Name 実行タイミングWhen Executed 説明Description
init-expression 他の要素の前に、ステートメントでは、init-expressionは一度だけ実行します。Before any other element of the for statement, init-expression is executed only once. その後、制御は cond-expression に渡されます。Control then passes to cond-expression. ループ インデックスを初期化するためによく使用されます。Often used to initialize loop indices. 式または宣言を含めることができます。It can contain expressions or declarations.
cond-expression 最初のイテレーションを含む statement の各イテレーションの実行前。Before execution of each iteration of statement, including the first iteration. statement は、cond-expression が true (0 以外) に評価された場合にのみ実行されます。statement is executed only if cond-expression evaluates to true (nonzero). 整数型に評価される式、または整数型へのあいまいでない変換が行われるクラス型。An expression that evaluates to an integral type or a class type that has an unambiguous conversion to an integral type. 通常、for ループの終了条件をテストするために使用します。Normally used to test for loop-termination criteria.
loop-expression statement の各イテレーションの終了時。At the end of each iteration of statement. loop-expression の実行後に cond-expression が実行されます。After loop-expression is executed, cond-expression is evaluated. 通常、ループ インデックスのインクリメントに使用します。Normally used to increment loop indices.

次の例では、さまざまな方法を使用する、ステートメント。The following examples show different ways to use the for statement.

#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: 012

init-expressionloop-expression には、コンマで区切った複数のステートメントを含めることができます。init-expression and loop-expression can contain multiple statements separated by commas. 例えば:For example:

#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 はインクリメントまたはデクリメントするか、他の方法で変更することができます。loop-expression can be incremented or decremented, or modified in other ways.

#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

Aループが終了したときに、 break返す、またはgoto (外側のラベルの付いたステートメントに対する、 ループ) 内でstatementを実行します。A for loop terminates when a break, return, or goto (to a labeled statement outside the for loop) within statement is executed. A続行内のステートメントをループは、現在のイテレーションのみを終了します。A continue statement in a for loop terminates only the current iteration.

場合cond-expressionは省略すると、これが true と見なされます、せずループは終了しません、 break返す、またはgoto内でstatementします。If cond-expression is omitted, it is considered true and the for loop will not terminate without a break, return, or goto within statement.

3 つのフィールドのステートメントは通常、終了のテストの初期化を使用し、インクリメントはこれらの用途に制限します。Although the three fields of the for statement are normally used for initialization, testing for termination, and incrementing, they are not restricted to these uses. たとえば、次のコードは、数値 0 ~ 4 を出力します。For example, the following code prints the numbers 0 through 4. この場合、statement は null ステートメントです。In this case, statement is the null statement:

#include <iostream>
using namespace std;

int main()
{
    int i;
    for( i = 0; i < 5; cout << i << '\n', i++){
        ;
    }
}

for ループおよび C++ 標準for Loops and the C++ Standard

C++ 標準で宣言された変数を後にスコープ外に出るループ、ループが終了します。The C++ standard says that a variable declared in a for loop shall go out of scope after the for loop ends. 例えば:For example:

for (int i = 0 ; i < 5 ; i++) {
   // do something
}
// i is now out of scope under /Za or /Zc:forScope

既定では、 /Zeで宣言された変数をまでスコープ内にループが残り、ループの外側のスコープが終了します。By default, under /Ze, a variable declared in a for loop remains in scope until the for loop's enclosing scope ends.

/Zc:forScopeを指定せずに for ループで宣言された変数の標準動作を有効に/Zaします。/Zc:forScope enables standard behavior of variables declared in for loops without needing to specify /Za.

スコープの相違点を使用することも、ループの下で変数を再宣言を/Ze次のようにします。It is also possible to use the scoping differences of the for loop to redeclare variables under /Ze as follows:

// 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++ ) {}
}

宣言された変数の標準の動作をより正確に模倣これをループで宣言された変数が必要です、ループを使用して、ループが完了した後にスコープ外に移動します。This more closely mimics the standard behavior of a variable declared in a for loop, which requires variables declared in a for loop to go out of scope after the loop is done. 変数が宣言されている場合、ループ コンパイラ内部的に引き上げますでローカル変数をループの外側のスコープと同じ名前のローカル変数が既にある場合でもです。When a variable is declared in a for loop, the compiler internally promotes it to a local variable in the for loop's enclosing scope even if there is already a local variable with the same name.

関連項目See also

繰り返しステートメントIteration Statements
キーワードKeywords
while ステートメント (C++)while Statement (C++)
do-while ステートメント (C++)do-while Statement (C++)
範囲ベースの for ステートメント (C++)Range-based for Statement (C++)