for
语句 (C++)
重复执行语句,直到条件变为 false。 有关基于范围的 for
语句的信息,请参阅基于范围的 for
语句 (C++)。 有关 C++/CLI for each
语句的信息,请参阅 for each
、in
。
语法
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: 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
当 statement
内的 break
、return 或 goto
(转到 for
循环外的标记语句)执行时,for
循环将终止。 for
循环中的 continue
语句仅终止当前迭代。
如果省略 cond-expression
,则将其视为 true
,如果没有 statement
中的 break
、return
或 goto
,for
循环将不会终止。
虽然 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
循环封闭范围中的局部变量。 即使存在同名的局部变量,仍会进行提升。
另请参阅
迭代语句
关键字
while
语句 (C++)
do-while
语句 (C++)
基于范围的 for
语句 (C++)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈