名稱空間
變體
操作

while 迴圈

來自 cppreference.com
< 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