while
循环
来自 cppreference.cn
有条件地重复执行语句。
目录 |
[编辑] 语法
attr (可选) while ( condition ) statement |
|||||||||
attr | - | (自 C++11 起) 任意数量的 属性 |
condition | - | 一个 条件 |
statement | - | 一个 语句 (通常是复合语句) |
[编辑] 条件
|
(自 C++26 起) |
- 如果它在语法上可以解析为表达式,则它被视为表达式。否则,它被视为声明,该声明不是结构化绑定声明(自 C++26 起)。
当控制到达 condition 时,条件将产生一个值,该值用于确定是否执行 statement。
[编辑] 表达式
如果 condition 是表达式,则它产生的值是上下文转换为 bool 的表达式的值。如果该转换是非良构的,则程序是非良构的。
[编辑] 声明
如果 condition 是简单声明,则它产生的值是上下文转换为 bool 的判定变量(见下文)的值。如果该转换是非良构的,则程序是非良构的。
[编辑] 非结构化绑定声明
该声明具有以下限制
- 语法上符合以下形式
|
(直至 C++11) |
|
(自 C++11 起) |
声明的判定变量是声明的变量。
结构化绑定声明该声明具有以下限制 声明的判定变量是由声明引入的虚构变量 e。 |
(自 C++26 起) |
[编辑] 解释
while 语句等价于
/* 标签 */ :
|
|||||||||
如果 condition 是声明,则它声明的变量在循环的每次迭代中都会被销毁和创建。
如果需要在 statement 内终止循环,则可以使用 break 语句作为终止语句。
如果需要在 statement 内终止当前迭代,则可以使用 continue 语句作为快捷方式。
[编辑] 注解
无论 statement 是否是复合语句,它总是引入块作用域。在其中声明的变量仅在循环体中可见,换句话说,
while (--x >= 0) int i; // i goes out of scope
与以下代码相同
while (--x >= 0) { int i; } // i goes out of scope
作为 C++ 前向进度保证的一部分,如果一个不是平凡无限循环的(自 C++26 起)没有可观察行为的循环不终止,则行为是未定义的。编译器允许移除此类循环。
[编辑] 关键字
[编辑] 示例
运行此代码
#include <iostream> int main() { // while loop with a single statement int i = 0; while (i < 10) i++; std::cout << i << '\n'; // while loop with a compound statement int j = 2; while (j < 9) { std::cout << j << ' '; j += 2; } std::cout << '\n'; // while loop with a declaration condition char cstr[] = "Hello"; int k = 0; while (char c = cstr[k++]) std::cout << c; std::cout << '\n'; }
输出
10 2 4 6 8 Hello
[编辑] 参见
C 文档 关于 while
|