for 语句 (C++)

重复执行语句,直到条件变为 false。 有关基于范围的 for 语句的信息,请参阅基于范围的 for 语句 (C++)

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

备注

使用 for 语句可构建必须执行指定次数的循环。

for 语句包括三个可选部分,如下表所示。

for 循环元素

语法名称

执行时间

说明

init-expression

for 语句的任何其他元素之前,init-expression 仅执行一次。 控制权然后传递给 cond-expression。

通常用来初始化循环索引。 它可以包含表达式或声明。

cond-expression

在执行 statement 的每次迭代之前,包括第一次迭代。 statement 只在 cond-expression 的计算结果为 true(非零)时执行。

计算结果为整数型或明确转换为整数型的类类型的表达式。 通常用于测试循环终止条件。

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

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

当 statement 中的 breakreturngoto(转到 for 循环外部的标记语句)执行时,for 循环将终止。 for 循环中的 continue 语句仅终止当前迭代。

如果忽略 cond-expression,则认为其为 true,for 循环在 statement 中没有 break、return 或 goto 时不会终止。

虽然 for 语句的三个字段通常用于初始化、测试终止条件和递增,但并不限于这些用途。 例如,下面的代码将打印数字 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 无需指定 /Za 即可启用 for 循环中声明的变量的标准行为。

也可以使用 for 循环的范围差异,重新声明 /Ze 下的变量,如下所示:

// 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 循环封闭范围中的局部变量,即使存在同名的局部变量也会如此。

请参见

参考

迭代语句 (C++)

C++ 关键字

While 语句 (C++)

do-while 语句 (C++)

基于范围的 for 语句 (C++)