Files
2025-10-25 03:02:53 +03:00

5.1 KiB
Raw Permalink Blame History

[stmt.iter.general]

8 Statements [stmt]

8.6 Iteration statements [stmt.iter]

8.6.1 General [stmt.iter.general]

1

#

Iteration statements specify looping.

iteration-statement:
while ( condition ) statement
do statement while ( expression ) ;
for ( init-statement conditionopt ; expressionopt ) statement
for ( init-statementopt for-range-declaration : for-range-initializer ) statement

[Note 1:

An init-statement ends with a semicolon.

— end note]

2

#

The substatement in an iteration-statement implicitly defines a block scope which is entered and exited each time through the loop.

If the substatement in an iteration-statement is a single statement and not a compound-statement, it is as if it was rewritten to be a compound-statement containing the original statement.

[Example 1:

while (--x >= 0)int i; can be equivalently rewritten aswhile (--x >= 0) {int i;}

Thus after the while statement, i is no longer in scope.

— end example]

3

#

A trivially empty iteration statement is an iteration statement matching one of the following forms:

while ( expression ) ;

while ( expression ) { }

do ; while ( expression ) ;

do { } while ( expression ) ;

for ( init-statement expressionopt ; ) ;

for ( init-statement expressionopt ; ) { }

The controlling expression of a trivially empty iteration statement is the expression of a while, do, or for statement (or true, if the for statement has no expression).

A trivial infinite loop is a trivially empty iteration statement for which the converted controlling expression is a constant expression, when interpreted as a constant-expression ([expr.const]), and evaluates to true.

The statement of a trivial infinite loop is replaced with a call to the function std::this_thread::yield ([thread.thread.this]); it is implementation-defined whether this replacement occurs on freestanding implementations.

[Note 2:

In a freestanding environment, concurrent forward progress is not guaranteed; such systems therefore require explicit cooperation.

A call to yield can add implicit cooperation where none is otherwise intended.

— end note]