while 循环
来自cppreference.com
重复执行 语句,直到 条件 的值变成 false。每次重复之前都进行检测。
语法
属性(可选) while ( 条件 ) 语句
|
|||||||||
属性 | - | (C++11 起) 任意数量的属性 |
条件 | - | 能按语境转换为 bool 的任意表达式,或带花括号或等号初始化器的单个变量的声明。每次重复之前求值此表达式,且在它产出 false 时退出循环。如果条件同时是声明,那么每次重复之前求值其初始化器,且在被声明变量的值转换为 false 时退出循环。 |
语句 | - | 任意语句,典型地为复合语句,它是循环体。 |
解释
无论 语句 是否为复合语句,它始终都会引入一个块作用域。换言之在其中声明的变量仅在循环体内可见。
while (--x >= 0) int i; // i 离开作用域
与下面的相同
while (--x >= 0) { int i; } // i 离开作用域
如果 条件 是像 T t = x 这样的声明,那么被声明的变量仅在循环体内处于作用域中,而且在每次重复中销毁并重新创建,换言之,这种 while 循环等价于:
label: { // 循环作用域的开始 T t = x; if (t) { 语句 goto label; // 调用 t 的析构函数 } }
如果循环的执行必须在某点终止,那么可以使用 break 语句作为终止语句。
如果循环需要在循环体结尾继续,那么可以使用 continue 语句作为快捷方式。
注解
作为 C++ 向前进展保证的一部分,如果没有可观察行为(不调用 I/O 函数,访问 volatile 对象,或进行原子或同步操作)的循环不会终止,那么它的行为未定义。编译器可以移除这种循环。
关键词
示例
运行此代码
#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