Namespaces
Variants

while loop

From cppreference.net
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

Exécute conditionnellement une instruction de manière répétée.

Table des matières

Syntaxe

attr  (facultatif) while ( condition ) instruction
attr - (since C++11) n'importe quel nombre d' attributs
condition - une condition
statement - une instruction (généralement une instruction composée)

Condition

Une condition peut être soit une expression soit une déclaration simple .

(depuis C++26)
  • S'il peut être résolu syntaxiquement comme une expression, il est traité comme une expression. Sinon, il est traité comme une déclaration qui n'est pas une déclaration de décomposition structurée (depuis C++26) .

Lorsque le contrôle atteint la condition, celle-ci produira une valeur, qui est utilisée pour déterminer si statement sera exécuté.

Expression

Si condition est une expression, la valeur qu'elle produit est la valeur de l'expression convertie contextuellement en bool . Si cette conversion est mal formée, le programme est mal formé.

Déclaration

Si condition est une déclaration simple, la valeur qu'elle produit est la valeur de la variable de décision (voir ci-dessous) convertie contextuellement en bool . Si cette conversion est mal formée, le programme est mal formé.

Déclaration non structurée de liaison

La déclaration comporte les restrictions suivantes :

  • Conforme syntaxiquement à la forme suivante :
  • type-specifier-seq declarator = assignment-expression
(jusqu'en C++11)
  • attribute-specifier-seq (optionnel) decl-specifier-seq declarator brace-or-equal-initializer
(depuis C++11)

La variable de décision de la déclaration est la variable déclarée.

Déclaration de liaison structurée

La déclaration présente les restrictions suivantes :

  • L' expression dans son initialiseur ne peut pas être de type tableau.
  • La séquence de spécificateurs de déclaration ne peut contenir que des spécificateurs de type et constexpr .

La variable de décision de la déclaration est la variable inventée e introduite par la déclaration .

(depuis C++26)

Explication

Une while instruction est équivalente à

/* label */ :

{

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

}

Si condition est une déclaration, la variable qu'elle déclare est détruite et recréée à chaque itération de la boucle.

Si la boucle doit être terminée au sein de statement , une break statement peut être utilisée comme instruction de terminaison.

Si l'itération actuelle doit être terminée au sein de statement , une continue statement peut être utilisée comme raccourci.

Notes

Indépendamment du fait que statement soit une instruction composée, elle introduit toujours une portée de bloc . Les variables déclarées dans celle-ci ne sont visibles que dans le corps de la boucle, en d'autres termes,

while (--x >= 0)
    int i;
// i sort de la portée

est le même que

while (--x >= 0)
{
    int i;
} // i sort du scope

Dans le cadre de la garantie de progression du C++, le comportement est indéfini si une boucle qui n'est pas une boucle infinie triviale (depuis C++26) sans comportement observable ne se termine pas. Les compilateurs sont autorisés à supprimer de telles boucles.

Mots-clés

while

Exemple

#include <iostream>
int main()
{
    // boucle while avec une instruction unique
    int i = 0;
    while (i < 10)
         i++;
    std::cout << i << '\n';
    // boucle while avec une instruction composée
    int j = 2;
    while (j < 9)
    {
        std::cout << j << ' ';
        j += 2;
    }
    std::cout << '\n';
    // boucle while avec une condition de déclaration
    char cstr[] = "Hello";
    int k = 0;
    while (char c = cstr[k++])
        std::cout << c;
    std::cout << '\n';
}

Sortie :

10
2 4 6 8
Hello

Voir aussi