while loop

From cppreference.com
< cpp‎ | language
 
 
C++ language
General topics
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
while
do-while
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
 
 

Conditionally executes a statement repeatedly.

Syntax

attr (optional) while ( condition ) statement
attr - (since C++11) any number of attributes
condition - a condition
statement - a statement (typically a compound statement)

Condition

A condition can either be an expression or a simple declaration. If it can be syntactically resolved as either an expression or a declaration, it is interpreted as the latter.

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

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.

Declaration

If condition is not an expression, it is a simple declaration with the following restrictions:

In this case, the value which condition yields is the value of the declared variable contextually converted to bool. If that conversion is ill-formed, the program is ill-formed.

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.

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.

Keywords

while

Example

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

Output:

10
2 4 6 8
Hello

See also