命名空间
变体
操作

while 循环

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

有条件地重复执行语句。

目录

[编辑] 语法

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

[编辑] 条件

condition 可以是 表达式简单声明

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

当控制到达 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 语句等价于

/* 标签 */ :

{

if ( condition )
{
statement
goto /* 标签 */ ;
}

}

如果 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