命名空間
變體
動作

while 迴圈

出自 cppreference.com
< cpp‎ | language
 
 
C++ 語言
一般主題
流程控制
條件執行陳述式
if
疊代陳述式 (迴圈)
for
範圍 for (C++11)
while
do-while
跳躍陳述式
函式
函式宣告
Lambda 函式運算式
inline 指定符
動態例外規範 (直到 C++17*)
noexcept 指定符 (C++11)
例外
命名空間
型別
指定符
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
儲存期指定符
初始化
 
 

有條件地重複執行語句。

目錄

[編輯] 語法

attr (選填) while ( condition ) statement
屬性 - (C++11 起) 任意數量的 屬性 (attributes)
條件 (condition) - 一個 條件
statement - 一個 語句 (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 是否為複合語句,它總會引入一個 區塊作用域 (block scope)。在其中宣告的變數僅在迴圈主體內可見,換句話說,

while (--x >= 0)
    int i;
// i goes out of scope

等同於

while (--x >= 0)
{
    int i;
} // i goes out of scope

作為 C++ 進度保證 (forward progress guarantee) 的一部分,若一個迴圈(非 平凡無限迴圈(自 C++26)不具備 可觀察行為 (observable behavior) 且無法終止,則其行為是 未定義的 (undefined)。編譯器被允許移除此類迴圈。

[編輯] 關鍵字

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
English Deutsch 日本語 中文(简体) 中文(繁體)