while ループ
From cppreference.com
文を条件付きで繰り返し実行します。
目次 |
[編集] 構文
attr(optional) while ( condition ) statement |
|||||||||
| attr | - | (C++11以降) 任意の数の属性 |
| condition | - | 条件 |
| statement | - | 文 (statement)(通常は複合文) |
[編集] 条件
|
(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
[編集] 関連項目
| while の C ドキュメント
|