命名空间
变体
操作

while 循环

来自 cppreference.com
< cpp‎ | 语言
 
 
C++ 语言
表达式
备用表示形式
字面量
布尔 - 整数 - 浮点数
字符 - 字符串 - nullptr (C++11)
用户定义 (C++11)
实用程序
属性 (C++11)
类型
typedef 声明
类型别名声明 (C++11)
强制转换
内存分配
特定于类的函数属性
explicit (C++11)
static

特殊成员函数
模板
其他
 
 

有条件地重复执行语句。

内容

[编辑] 语法

attr (可选) while ( condition ) statement
attr - (自 C++11 起) 任意数量的 属性
condition - 一个 条件
statement - 一个 语句(通常是一个复合语句)

[编辑] 条件

一个 condition 可以是一个 表达式 或一个 简单声明

  • 如果它可以在语法上解析为一个 结构化绑定 声明,则将其解释为结构化绑定声明。
(自 C++26 起)
  • 如果它可以在语法上解析为一个表达式或一个声明,而不是结构化绑定声明(自 C++26 起),则将其解释为后者。

当控制到达 condition 时,condition 将产生一个值,该值用于确定是否将执行 statement

[编辑] 表达式

如果 condition 是一个表达式,则它产生的值是该表达式上下文转换为 bool 的值。如果该转换是非法的,则程序是非法的。

[编辑] 声明

如果 condition 是一个简单声明,则它产生的值是决策变量(见下文)上下文转换为 bool 的值。如果该转换是非法的,则程序是非法的。

[编辑] 非结构化绑定声明

该声明有以下限制

该声明的决策变量是声明的变量。

结构化绑定声明

该声明有以下限制

声明的决策变量是声明引入的虚拟变量 e

(自 C++26 起)

[编辑] 解释

while 语句等效于

/* label */ :

{

if ( condition )
{
statement
goto /* 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 起) 没有 可观察的行为 不会终止,则行为是 未定义的。编译器被允许删除此类循环。

[编辑] 关键词

while

[编辑] 例子

#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