for 语句 (C++)

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

语法

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

注解

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

for 语句由三个可选部分组成,如下表所示。

for 循环元素

语法名称 执行时 DESCRIPTION
init-expression 在语句的任何其他元素 for 之前, init-expression 只执行一次。 然后控制传递给 cond-expression. 通常用于初始化循环索引。 它可以包含表达式或声明。
cond-expression 在执行每个迭代 statement之前,包括第一次迭代。 仅在计算结果为 true(非零)时才 执行< 一个表达式,该表达式的计算结果为整型类型或类类型,该类类型与整型类型有明确转换。 通常用于测试循环终止条件。
loop-expression 每次迭代 statement结束时。 执行后 loop-expressioncond-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

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

如果 cond-expression 省略,则将其视为 true循环,并且 for 循环不会终止,没有 a breakreturngoto 内部 statement

尽管语句的 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++ Standard

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

还可以按如下所示使用循环的范围差异 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 。 即使已经有具有相同名称的局部变量,也会升级它。

另请参阅

迭代语句
关键字
while 语句 (C++)
do-while 语句 (C++)
基于 for 范围的语句(C++)