while 循环
来自cppreference.com
重复执行 语句 ,直至 条件 的值变为 false 。检测发生于每次迭代之前。
语法
属性(可选) while ( 条件 ) 语句
|
|||||||||
| 属性(C++11) | - | 任何数量的属性 |
| 条件 | - | 任何能按语境转换为 bool 的表达式,或带花括号或等号初始化器的单个变量声明。每次迭代前求值此表达式,而若它产出 false ,则退出循环。若此为声明,则每次迭代前求值初始化器,且若被声明变量的值转换为 false ,则退出循环。
|
| 语句 | - | 任何语句,典型地为复合语句,它是循环体。 |
解释
若 语句 是单条语句(非复合语句),则声明于其中的变量的作用域被限制在 while 循环内,如同它是复合语句,换言之
while (--x >= 0)
int i;
// i 离开作用域
与下面的相同
while (--x >= 0) {
int i;
} // i 离开作用域
若 条件 是如 T t = x 的声明,则被声明变量仅在循环体内在作用域中,而且在每次迭代中销毁并重新创建,换言之,这种 while 循环等价于
label:
{ // 循环作用域的开始
T t = x;
if (t) {
statement
goto label; // 调用 t 的析构函数
}
}
若循环的执行必须在某点终止,则能以 break 语句为终止语句。
若循环需要在循环体结尾继续,则能以 continue 语句为快捷方式。
注意
作为 C++ 向前进展保证的一部分,如果平凡的无限循环以外的(C++26 起)没有可观察行为的循环不会终止,那么它的行为未定义。编译器可以移除这种循环。
关键词
示例
运行此代码
#include <iostream>
int main() {
// 带单语句的 while 循环
int i = 0;
while (i < 10)
i++;
std::cout << i << '\n';
// 带复合语句的 while 循环
int j = 2;
while (j < 9) {
std::cout << j << ' ';
j += 2;
}
std::cout << '\n';
// 带声明条件的 while 循环
char cstr[] = "Hello";
int k = 0;
while (char c = cstr[k++])
std::cout << c;
std::cout << '\n';
}
输出:
10
2 4 6 8
Hello
参阅
while 的 C 文档
|