while ループ
提供: cppreference.com
condition の値が false になるまで、 statement を繰り返し実行します。 テストは繰り返しの各回の前に行われます。
構文
attr(オプション) while ( condition ) statement
|
|||||||||
| attr(C++11) | - | 任意の個数の属性。 |
| condition | - | bool に文脈的に変換可能な任意の式、または波括弧または等号の初期化子付きの単一の変数の宣言。 この式は繰り返しの各回の前に評価され、 false になると、ループを終了します。 宣言の場合は、初期化子が繰り返しの各回の前に評価され、その宣言された変数の値が false に変換される場合、ループを終了します。
|
| statement | - | 任意の文。 一般的には複文であり、ループの本体になります。 |
説明
statement が単一の文 (複文でない) の場合は、宣言された変数のスコープはそれが複文であったかのように while ループに制限されます。 別の言い方をすると、
while (--x >= 0)
int i;
// i はスコープ外になります。
これは以下と同じです。
while (--x >= 0) {
int i;
} // i はスコープ外になります。
condition が T t = x のような宣言である場合、その宣言された変数はループ本体のスコープに制限され、繰り返しのたびに破棄され、再作成されます。 別の言い方をすると、そのような while ループは以下と同等です。
label:
{ // condition のスコープの始まり
T t = x;
if (t) {
statement
goto label; // t のデストラクタを呼びます。
}
}
ループの実行をどこかの点で終了する必要がある場合は、 break 文を終了文として使用することができます。
ループの実行をループ本体の終わりから継続する必要がある場合は、 continue 文をショートカットとして使用することができます。
ノート
C++ の前方進行保証の一部として、観察可能な動作を持たない (入出力関数を呼んだり、 volatile オブジェクトにアクセスしたり、アトミック操作や同期操作行ったりしない) ループが終了しない場合、動作は未定義です。 コンパイラはそのようなループを削除することが許されています。
キーワード
例
Run this code
#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言語リファレンス
|