Statements
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 :
- Instructions étiquetées
- Instructions d'expression
- Instructions composées
- Instructions de sélection
- Instructions d'itération
- Instructions de saut
| (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) | ||||||||
|
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
Sne peuvent être référencées que par des instructions dansS. -
Chaque étiquette
case
ou
default
apparaissant dans
Sne peut être associée qu'à une switch statement dansS.
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) | |||||||
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) | |||||||
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) | ||||||||
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'assertionUne assertion de contrat.
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) | ||||||||
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) | ||||||||
Blocs atomiques et synchronisésUn bloc atomique et synchronisé fournit la mémoire transactionnelle .
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 :
- Pour une instruction étiquetée , son statement .
- Pour une instruction composée , toute instruction de son statement... .
- Pour une instruction de sélection , l'une de ses statement ou compound-statement (depuis C++23) .
- Pour une instruction d'itération , son statement .
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
|