名前空間
変種
操作

while ループ

From cppreference.com
< cpp‎ | language
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
while
do-while
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

文を条件付きで繰り返し実行します。

目次

[編集] 構文

attr(optional) while ( condition ) statement
attr - (C++11以降) 任意の数の属性
condition - 条件
statement - 文 (statement)(通常は複合文)

[編集] 条件

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 )
{
statement
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

[編集] 関連項目

English 日本語 中文(简体) 中文(繁體)