while loop - cppreference.com (original) (raw)

Conditionally executes a statement repeatedly.

Contents

[edit] Syntax

| | | | | ----------------------------------------------------- | | | | attr (optional) while ( condition ) statement | | | | | | |

[edit] Condition

A condition can either be an expression or a simple declaration.

If it can be syntactically resolved as a structured binding declaration, it is interpreted as a structured binding declaration. (since C++26)

When control reaches condition, the condition will yield a value, which is used to determine whether statement will be executed.

[edit] Expression

If condition is an expression, the value it yields is the the value of the expression contextually converted to bool. If that conversion is ill-formed, the program is ill-formed.

[edit] Declaration

If condition is a simple declaration, the value it yields is the value of the decision variable (see below) contextually converted to bool. If that conversion is ill-formed, the program is ill-formed.

[edit] Non-structured binding declaration

The declaration has the following restrictions:

type-specifier-seq declarator = assignment-expression (until C++11)
attribute-specifier-seq(optional) decl-specifier-seq declarator brace-or-equal-initializer (since C++11)

The decision variable of the declaration is the declared variable.

[edit] Explanation

A while statement is equivalent to

| | | | | ----------------------------------------------------------------------------------------------------------- | | | | /* label */ : { if ( condition ) { statement goto /* label */ ; } } | | | | | | |

If condition is a declaration, the variable it declares is destroyed and created with each iteration of the loop.

If the loop needs to be terminated within statement, a break statement can be used as terminating statement.

If the current iteration needs to be terminated within statement, a continue statement can be used as shortcut.

[edit] Notes

Regardless of whether statement is a compound statement, it always introduces a block scope. Variables declared in it are only visible in the loop body, in other words,

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

is the same as

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

As part of the C++ forward progress guarantee, the behavior is undefined if a loop that is not a trivial infinite loop(since C++26) without observable behavior does not terminate. Compilers are permitted to remove such loops.

[edit] Keywords

while

[edit] Example

#include   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'; }

Output:

[edit] See also