while
迴圈
來自 cppreference.com
有條件地重複執行語句。
目錄 |
[編輯] 語法
attr (可選) while ( condition ) statement |
|||||||||
屬性 | - | (自 C++11 起) 任意數量的屬性 |
條件 | - | 一個條件 |
語句 | - | 一個語句(通常是複合語句) |
[編輯] 條件
condition 既可以是一個表示式,也可以是一個簡單宣告。
|
(C++26 起) |
- 如果它可以從語法上解析為表示式,則將其視為表示式。否則,將其視為宣告,但不是結構化繫結宣告(C++26 起)。
當控制到達 condition 時,condition 將產生一個值,該值用於確定是否執行 statement。
[編輯] 表示式
如果 condition 是一個表示式,它產生的值是該表示式在上下文中轉換為 bool 型別的值。如果該轉換格式不正確,則程式格式不正確。
[編輯] 宣告
如果 condition 是一個簡單宣告,它產生的值是決策變數(見下文)在上下文中轉換為 bool 型別的值。如果該轉換格式不正確,則程式格式不正確。
[編輯] 非結構化繫結宣告
該宣告有以下限制:
- 語法上符合以下形式:
|
(C++11 前) |
|
(C++11 起) |
宣告的決策變數是被宣告的變數。
結構化繫結宣告該宣告有以下限制: 該宣告的決策變數是由該宣告引入的虛構變數 e。 |
(C++26 起) |
[編輯] 解釋
一個 while 語句等價於
/* 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 起)迴圈沒有可觀察行為且沒有終止,則行為是未定義的。編譯器可以移除此類迴圈。
[編輯] 關鍵詞
[編輯] 示例
執行此程式碼
#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
|