while
loop
Conditionally executes a statement repeatedly.
Contents |
[edit]Syntax
attr (optional)while ( condition) statement | |||||||||
attr | - | (since C++11) any number of attributes |
condition | - | a condition |
statement | - | a statement (typically a compound statement) |
[edit]Condition
A condition can either be an expression or a simple declaration.
| (since C++26) |
- If it can be syntactically resolved as an expression, it is treated as an expression. Otherwise, it is treated as a declaration that is not 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:
- Syntactically conforms to the following form:
| (until C++11) |
| (since C++11) |
- The declarator cannot specify a function or an array.
- The type specifier sequence(until C++11)declaration specifier sequence can only contain type specifiers and constexpr, and it(since C++11) cannot define a class or enumeration.
The decision variable of the declaration is the declared variable.
Structured binding declarationThe declaration has the following restrictions:
The decision variable of the declaration is the invented variable eintroduced by the declaration. | (since C++26) |
[edit]Explanation
A while statement is equivalent to
/* 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
[edit]Example
#include <iostream> int main(){// while loop with a single statementint i =0;while(i <10) i++;std::cout<< i <<'\n'; // while loop with a compound statementint j =2;while(j <9){std::cout<< j <<' '; j +=2;}std::cout<<'\n'; // while loop with a declaration conditionchar cstr[]="Hello";int k =0;while(char c = cstr[k++])std::cout<< c;std::cout<<'\n';}
Output:
10 2 4 6 8 Hello
[edit]See also
C documentation for while |