while
循环
来自 cppreference.cn
有条件地重复执行语句。
目录 |
[编辑] 语法
attr (可选) while ( condition ) statement |
|||||||||
属性 | - | (自 C++11 起) 任意数量的属性 |
条件 | - | 一个条件 |
语句 | - | 一个语句(通常是复合语句) |
[编辑] 条件
condition 既可以是一个表达式,也可以是一个简单声明。
|
(C++26 起) |
- 如果它可以从语法上解析为表达式,则将其视为表达式。否则,将其视为声明,但不是结构化绑定声明(C++26 起)。
当控制到达 condition 时,condition 将产生一个值,该值用于确定是否执行 statement。
[编辑] 表达式
如果 condition 是一个表达式,它产生的值是该表达式在上下文中转换为 bool 类型的值。如果该转换格式不正确,则程序格式不正确。
[编辑] 声明
如果 condition 是一个简单声明,它产生的值是决策变量(见下文)在上下文中转换为 bool 类型的值。如果该转换格式不正确,则程序格式不正确。
[编辑] 非结构化绑定声明
该声明有以下限制:
- 语法上符合以下形式:
|
(C++11 前) |
|
(C++11 起) |
声明的决策变量是被声明的变量。
结构化绑定声明该声明有以下限制: 该声明的决策变量是由该声明引入的虚构变量 e。 |
(C++26 起) |
[编辑] 解释
一个 while 语句等价于
/* label */ :
|
|||||||||
如果 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
|