命名空间
变体
操作

while 循环

来自 cppreference.cn
< cpp‎ | 语言
 
 
C++ 语言
 
 

有条件地重复执行语句。

目录

[编辑] 语法

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

[编辑] 条件

condition 既可以是一个表达式,也可以是一个简单声明

  • 如果它在语法上可以解析为结构化绑定声明,则将其解释为结构化绑定声明。
(C++26 起)
  • 如果它可以从语法上解析为表达式,则将其视为表达式。否则,将其视为声明,但不是结构化绑定声明(C++26 起)

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

[编辑] 表达式

如果 condition 是一个表达式,它产生的值是该表达式在上下文中转换为 bool 类型的值。如果该转换格式不正确,则程序格式不正确。

[编辑] 声明

如果 condition 是一个简单声明,它产生的值是决策变量(见下文)在上下文中转换为 bool 类型的值。如果该转换格式不正确,则程序格式不正确。

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

该声明有以下限制:

  • 语法上符合以下形式:
  • type-specifier-seq declarator = assignment-expression
(C++11 前)
  • attribute-specifier-seq(可选) decl-specifier-seq declarator brace-or-equal-initializer
(C++11 起)

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

结构化绑定声明

该声明有以下限制:

该声明的决策变量是由该声明引入的虚构变量 e

(C++26 起)

[编辑] 解释

一个 while 语句等价于

/* label */ :

{

if ( condition )
{
语句
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