while
     
     loop
    
    有条件地重复执行一条语句。
| 目录 | 
语法
| attr
         
         
         
          (可选) 
          
           while (
          
         condition
          
           )
          
         statement | |||||||||
| attr | - | (since C++11) 任意数量的 属性 | 
| condition | - | 一个 条件表达式 | 
| statement | - | 一条 语句 (通常是复合语句) | 
条件表达式
| 
 | (since C++26) | 
- 如果它能被语法解析为表达式,则被视为表达式。否则,它被视为声明 (非结构化绑定声明 (自 C++26 起) 。
当控制流到达条件语句时,该条件将产生一个值,该值用于判断是否执行 statement 。
表达式
如果 condition 是一个表达式,其产生的值是该表达式在上下文中转换为 bool 类型后的值。如果该转换不合法,则程序不合法。
声明
如果 condition 是一个简单声明,其产生的值是由决策变量(见下文)经上下文转换到 bool 类型的值。若该转换格式错误,则程序格式错误。
非结构化绑定声明
该声明具有以下限制:
- 语法上符合以下形式:
| 
 | (C++11 前) | 
| 
 | (C++11 起) | 
声明的决策变量即为所声明的变量。
| 结构化绑定声明该声明具有以下限制: 该声明的决策变量是由 声明引入的 虚构变量 e 。 | (since C++26) | 
说明
一个 while 语句等价于
| /* 标签 */ 
          
           :
          
         
           
 
           | |||||||||
如果 condition 是一个声明,那么它所声明的变量会在每次循环迭代时被销毁并重新创建。
如果循环需要在 statement 内部终止,可以使用 break statement 作为终止语句。
若需要在 statement 中终止当前迭代,可使用 continue 语句 作为快捷方式。
注释
无论 statement 是否为复合语句,它始终会引入一个 块作用域 。在其中声明的变量仅在循环体内可见,换言之,
while (--x >= 0) int i; // i 超出作用域
等同于
while (--x >= 0) { int i; } // i 超出作用域
作为 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
参见
| 
          
           
            C 文档
           
          
          关于
          
           
            while
           
          
          |