Namespaces
Variants

Statements

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

Instructions sont des fragments du programme C++ qui sont exécutés en séquence. Le corps de toute fonction est une séquence d'instructions. Par exemple :

int main()
{
    int n = 1;                        // instruction de déclaration
    n = n + 1;                        // instruction d'expression
    std::cout << "n = " << n << '\n'; // instruction d'expression
    return 0;                         // instruction de retour
}

C++ inclut les types d'instructions suivants :

(depuis C++26)
(TM TS)

Table des matières

Instructions étiquetées

Une instruction étiquetée étiquette une instruction à des fins de contrôle de flux.

instruction d'étiquette
label - l'étiquette appliquée à l'instruction (définie ci-dessous)
statement - l'instruction à laquelle l'étiquette s'applique, elle peut être elle-même une instruction étiquetée, permettant ainsi plusieurs étiquettes

Étiquettes

label est défini comme

attr  (facultatif) identificateur : (1)
attr  (facultatif) case constexpr : (2)
attr  (facultatif) default: (3)
1) cible pour goto ;
2) case étiquette dans une instruction switch ;
3) default étiquette dans une instruction switch .

Une séquence d' attributs attr peut apparaître soit au début de l'étiquette (auquel cas elle s'applique à l'étiquette), soit juste avant toute instruction elle-même, auquel cas elle s'applique à l'instruction entière.

(depuis C++11)

Une étiquette avec un identifiant déclaré à l'intérieur d'une fonction correspond à toutes les instructions goto avec le même identifiant dans cette fonction, dans tous les blocs imbriqués, avant et après sa propre déclaration.

Deux étiquettes dans une fonction ne doivent pas avoir le même identifiant.

En plus d'être ajoutées à une instruction, les étiquettes peuvent également être utilisées n'importe où dans les instructions composées .

(depuis C++23)

Les étiquettes ne sont pas trouvées par la recherche non qualifiée : une étiquette peut avoir le même nom que toute autre entité dans le programme.

void f()
{
    {
        goto label; // label dans la portée même s'il est déclaré ultérieurement
        label:      // le label peut apparaître à la fin d'un bloc de manière autonome depuis C++23
    }
    goto label; // le label ignore la portée du bloc
}
void g()
{
    goto label; // erreur : label non présent dans la portée de g()
}

Instructions à flux de contrôle limité

Les instructions suivantes sont des instructions à contrôle de flux limité :

(depuis C++17)
(depuis C++23)

Pour chaque instruction à contrôle de flux limité S :

  • Toutes les étiquettes de destination goto déclarées dans S ne peuvent être référencées que par des instructions dans S .
  • Chaque étiquette case ou default apparaissant dans S ne peut être associée qu'à une switch statement dans S .

Instructions d'expression

Une instruction d'expression est une expression suivie d'un point-virgule.

attr  (facultatif) expression  (facultatif) ;
attr - (since C++11) séquence facultative d'un nombre quelconque d' attributs
expression - une expression

La plupart des instructions dans un programme C++ typique sont des instructions d'expression, telles que des affectations ou des appels de fonction.

Une instruction d'expression sans expression est appelée une instruction nulle . Elle est souvent utilisée pour fournir un corps vide à une boucle for ou while . Elle peut également être utilisée pour porter un libellé à la fin d'une instruction composée. (jusqu'en C++23)

Instructions composées

Une instruction composée ou un bloc regroupe une séquence d'instructions en une seule instruction.

attr  (optionnel) { instruction...  (optionnel) label...  (optionnel) (depuis C++23) }

Lorsqu'une seule instruction est attendue, mais que plusieurs instructions doivent être exécutées en séquence (par exemple, dans une instruction if ou une boucle), une instruction composée peut être utilisée :

if (x > 5)          // début de l'instruction if
{                   // début du bloc
    int n = 1;      // instruction de déclaration
    std::cout << n; // instruction d'expression
}                   // fin du bloc, fin de l'instruction if

Chaque instruction composée introduit son propre bloc de portée ; les variables déclarées à l'intérieur d'un bloc sont détruites à l'accolade fermante dans l'ordre inverse :

int main()
{ // début du bloc externe
    {                                // début du bloc interne
        std::ofstream f("test.txt"); // instruction de déclaration
        f << "abc\n";                // instruction d'expression
    }                                // fin du bloc interne, f est vidé et fermé
    std::ifstream f("test.txt"); // instruction de déclaration
    std::string str;             // instruction de déclaration
    f >> str;                    // instruction d'expression
} // fin du bloc externe, str est détruit, f est fermé

Une étiquette à la fin d'une instruction composée est traitée comme si elle était suivie d'une instruction nulle.

(depuis C++23)

Instructions de sélection

Une instruction de sélection choisit entre l'un des plusieurs flux de contrôle.

attr  (optionnel) if constexpr (optionnel) ( init-statement  (optionnel) condition ) statement (1)
attr  (optionnel) if constexpr (optionnel) ( init-statement  (optionnel) condition ) statement
else statement
(2)
attr  (optionnel) switch ( init-statement  (optionnel) condition ) statement (3)
attr  (optionnel) if ! (optionnel) consteval compound-statement (4) (depuis C++23)
attr  (optionnel) if ! (optionnel) consteval compound-statement else statement (5) (depuis C++23)
1) if instruction;
2) if instruction avec une clause else ;
3) switch instruction;
4) consteval if instruction;
5) consteval if instruction avec une clause else.

Instructions d'itération

Une instruction d'itération exécute de manière répétée du code.

attr  (optionnel) while ( condition ) instruction (1)
attr  (optionnel) do instruction while ( expression ) ; (2)
attr  (optionnel) for ( instruction-init condition  (optionnel) ; expression  (optionnel) ) instruction (3)
attr  (optionnel) for
( instruction-init  (optionnel) (depuis C++20) déclaration-portée-for : initialisation-portée-for ) instruction
(4) (depuis C++11)
1) while boucle;
3) for boucle;

Instructions de saut

Une instruction de saut transfère inconditionnellement le flux de contrôle.

attr  (optionnel) break; (1)
attr  (optionnel) continue; (2)
attr  (optionnel) return expression  (optionnel) ; (3)
attr  (optionnel) return braced-init-list ; (4) (depuis C++11)
attr  (optionnel) goto identifier ; (5)
1) break instruction;
2) continue instruction;
3) return instruction avec une expression facultative ;
4) return instruction utilisant list initialization ;
5) goto instruction.

Note : pour toutes les instructions de saut, le transfert hors d'une boucle, hors d'un bloc, ou en arrière au-delà d'une variable initialisée avec une durée de stockage automatique implique la destruction des objets avec une durée de stockage automatique qui sont dans la portée au point de transfert depuis, mais pas au point de transfert vers. Si plusieurs objets ont été initialisés, l'ordre de destruction est l'inverse de l'ordre d'initialisation.

Instructions d'assertion

Une assertion de contrat.

contract_assert attr  (optionnel) ( prédicat ) ;
1) contract_assert instruction.
(depuis C++26)

Instructions de déclaration

Une déclaration introduit un ou plusieurs identifiants dans un bloc.

block-declaration (1)
1) Voir Declarations et Initialization pour plus de détails.

try blocs

Un try bloc intercepte les exceptions levées lors de l'exécution d'autres instructions.

attr  (optionnel) try compound-statement handler-sequence (1)
1) Voir try block pour plus de détails.


Blocs atomiques et synchronisés

Un bloc atomique et synchronisé fournit la mémoire transactionnelle .

synchronized compound-statement (1) (TM TS)
atomic_noexcept compound-statement (2) (TM TS)
atomic_cancel compound-statement (3) (TM TS)
atomic_commit compound-statement (4) (TM TS)
1) bloc synchronisé , exécuté dans un ordre total unique avec tous les blocs synchronisés ;
2) bloc atomique qui abandonne en cas d'exceptions ;
3) bloc atomique qui effectue un retour arrière en cas d'exceptions ;
4) bloc atomique qui valide en cas d'exceptions.
(TM TS)

Sous-instructions

Une sous-instruction d'une instruction est l'une des suivantes :

Une instruction S1 englobe une instruction S2 si l'une des conditions suivantes est satisfaite :

  • S2 est une sous-instruction de S1
  • S1 est une instruction de sélection ou une instruction d'itération, et S2 est l' init-statement de S1 .
  • S1 est un try block , et S2 est soit sa compound-statement , soit la compound-statement de tout handler dans sa handler-seq .
  • S1 englobe une instruction S3 et S3 englobe S2 .

Une instruction S1 est englobée par une instruction S2 si S2 englobe S1 .

Voir aussi

Documentation C pour Statements