对语句(C++)
重复 执行语句 和 循环表达式,直到 cond 表达式 变为 false。有关语句基于范围的信息,请参见 基于范围的 for 语句 (C++)。
for ( init-expression ; cond-expression ; loop-expression )
statement
备注
使用 for 语句构造必须执行指定的次数的循环。
如下表所示,for 语句包含三个可选部分。
对于循环元素
语法名称 |
当执行 |
内容 |
---|---|---|
init 表达式 |
在 for 语句之前的其他元素。init 表达式 只执行一次。控件随后传递给 cond 表达式。 |
常用初始化循环索引。它可以包含表达式或声明 (仅限 C++)。 |
cond-expression |
在 语句的每次迭代之前执行,包括第一个迭代。语句 中执行,只有 + 当 cond 表达式 计算结果为 true (非零)。 |
计算为整型或选件类类型对于整型的明确转换的表达式。通常用于测试停止循环条件。 |
loop-expression |
在 语句的每次迭代结束时。在 循环表达式 执行后,cond 计算表达式。 |
通常用于添加循环索引。 |
例如:
// for_statement1.cpp
#include <stdio.h>
int main() {
int i;
for ( i = 0 ; i < 2 ; i++ )
printf_s( "\n%d\n",i );
}
前面的 for 循环与下面 while 循环是等效的:
// for_statement2.cpp
#include <stdio.h>
int main()
{
int i = 0;
while ( i < 2 )
printf_s( "%d\n", i++ );
}
init 表达式 和 循环表达式 可以包含 逗号运算符分隔的多个语句。例如:
// for_statment3.cpp
#include <stdio.h>
int main()
{
int i, j;
for ( i = 5, j = 10 ; i + j < 20; i++, j++ )
printf_s( "\n i + j = %d", (i + j) );
}
for 停止循环,当 中断、返回或 导航 (对一个 labeled 语句在 for 循环之外) 时在 语句 中执行。在 for 循环的一个 继续 语句终止只打印当前迭代。
如果 cond 表达式 省略,则将其视为 true,并且 for 循环不会停止不 break、return或 goto 在 语句中。
一种简便方式指定无限循环使用 for 语句为:
for( ; ; )
{
// Statements to be executed.
}
虽然 for 语句的三个字段用于初始化通常使用,测试的停止并提高,它们不限于这些用法。例如,下面的代码将输出第 0 至 4。在这种情况下,语句 为空语句:
// for_statement4.cpp
#include <stdio.h>
int main()
{
int i;
for( i = 0; i < 5; printf_s("%d\n", i), i++)
;
}
对于循环和 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。
使用 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 循环的封闭范围局部变量,即使已存在同名的局部变量。