while 循环

来自cppreference.com
< cpp‎ | language


 
 
C++ 语言
 
 

有条件地重复执行某条语句。

目录

[编辑] 语法

属性 (可选) while ( 条件 ) 语句
属性 - (C++11 起) 任意数量的属性
条件 - 条件
语句 - 任意语句(典型情况下是复合语句)

[编辑] 条件

条件 可以是表达式简单声明

  • 如果在语法上它可以解析为结构化绑定声明,那么它就会作为结构化绑定声明处理。
(C++26 起)
  • 如果在语法上它既可以解析为表达式,则作为表达式处理,否则作为结构化绑定声明以外的(C++26 起)声明处理。

当控制抵达条件 时,条件会产生一个值,该值用于确定是否会执行语句

[编辑] 表达式

如果条件 是表达式,那么它产生的值就是该表达式按语境转换到 bool 的值。如果该转换非良构,那么程序也非良构。

[编辑] 声明

如果条件 是简单声明,那么它产生的值是决定变量(见下文)按语境转换到 bool 的值。如果该转换非良构,那么程序也非良构。

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

声明具有以下限制:

  • 语法符合以下形式:
  • 类型说明符序列 声明符 = 赋值表达式
(C++11 前)
  • 属性说明符序列(可选) 声明说明符序列 声明符 花括号或等号初始化器
(C++11 起)

这种声明的决定变量就是它声明的变量。

结构化绑定声明

声明具有以下限制:

这种声明的决定变量是由声明引入的虚设变量 e

(C++26 起)

[编辑] 解释

while 语句等价于

/* 标号 */ :

{

if ( 条件 )
{
语句
goto /* 标号 */ ;
}

}

如果条件 是声明,那么它声明的变量会在循环的每次迭代中都被销毁和创建。

如果需要在语句 中结束循环,那么可以使用 break 语句作为终止语句。

如果需要在语句 中结束当前迭代,那么可以使用 continue 语句作为快捷方式。

[编辑] 注解

无论语句 是否为复合语句,它始终都会引入一个块作用域。换言之在其中声明的变量仅在循环体内可见。

while (--x >= 0)
    int i;
// i 离开作用域

与下面的相同

while (--x >= 0)
{
    int i;
} // i 离开作用域

作为 C++ 向前进展保证的一部分,如果平凡的无限循环以外的(C++26 起)没有可观察行为的循环不会终止,那么它的行为未定义。编译器可以移除这种循环。

[编辑] 关键词

while

[编辑] 示例

#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

[编辑] 参阅

while 的 C 文档