while
循环
来自 cppreference.com
有条件地重复执行语句。
内容 |
[编辑] 语法
attr (可选) while ( condition ) statement |
|||||||||
attr | - | (自 C++11 起) 任意数量的 属性 |
condition | - | 一个 条件 |
statement | - | 一个 语句(通常是一个复合语句) |
[编辑] 条件
一个 condition 可以是一个 表达式 或一个 简单声明。
|
(自 C++26 起) |
- 如果它可以在语法上解析为一个表达式或一个声明,而不是结构化绑定声明(自 C++26 起),则将其解释为后者。
当控制到达 condition 时,condition 将产生一个值,该值用于确定是否将执行 statement。
[编辑] 表达式
如果 condition 是一个表达式,则它产生的值是该表达式上下文转换为 bool 的值。如果该转换是非法的,则程序是非法的。
[编辑] 声明
如果 condition 是一个简单声明,则它产生的值是决策变量(见下文)上下文转换为 bool 的值。如果该转换是非法的,则程序是非法的。
[编辑] 非结构化绑定声明
该声明有以下限制
- 它只有一个 声明符。
- 该声明符不能指定一个 函数 或一个 数组。
- 该声明符必须具有一个 初始化器,该初始化器不能是语法 (3)。
- 该 声明说明符序列 只能包含类型说明符 和 constexpr(自 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
|