Namespaces
Variants
Actions

while loop

From cppreference.com
< cpp‎ | language
 
 
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications(until C++17*)
noexcept specifier(C++11)
Exceptions
Namespaces
Types
Specifiers
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
Special member functions
Templates
Miscellaneous
 
 

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.

  • If it can be syntactically resolved as a structured binding declaration, it is interpreted as a structured binding 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:
  • type-specifier-seqdeclarator=assignment-expression
(until C++11)
  • attribute-specifier-seq(optional)decl-specifier-seqdeclaratorbrace-or-equal-initializer
(since C++11)

The decision variable of the declaration is the declared variable.

Structured binding declaration

The 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)
{
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 <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
close