Structures de contrôle
Hérité du C
L’ensemble des structures de contrôle du C se retrouvent à l’identique sans aucun aménagement particulier en C++, hormis un enrichissement de la boucle for.
Pour rappel, un algorithme est une suite d’instructions qui accomplit une tâche. Un programme accomplit la plupart du temps un grand nombre de tâches elles-mêmes organisées entre elles comme un algorithme. Les structures de contrôle donnent plusieurs moyens fondamentaux d’organiser les tâches entre elles.
Au premier niveau de l’algorithme, nous avons des blocs d’instructions, et au second, nous pouvons organiser une circulation entre des blocs d’instructions grâce à quelques opérateurs spécifiques :
-
Des sauts conditionnels de blocs à blocs avec les if.
-
Des branchements entre blocs avec le switch.
-
Des répétitions de blocs avec les trois boucles while, do-while et for.
-
Des appels de bloc avec des fonctions.
1. Bloc d’instructions
-
Au premier niveau de l’algorithme, des instructions sont regroupées dans un bloc d’instructions. En C, C++ (et tous les langages dérivés), il est délimité avec les opérateurs { } (accolades ouvrante et fermante). Par exemple :
// voici un bloc d'instructions
{
int val;
val = rand();
std::cout << "val : " << val << std::endl;
}
-
Un bloc d’instructions est UNE instruction composée de plusieurs instructions qui se suivent.
-
Un bloc peut contenir d’autres blocs imbriqués.
-
Dans un fichier source, il ne peut pas y avoir d’instruction en dehors d’un bloc (sauf directives macroprocesseur et déclarations de variables globales ou de fonctions). Pour être valides, toutes...
Apports du C++
1. Condition if ou else-if marquée constexpr
Dans certaines situations, notamment avec l’utilisation de template, la condition d’un if ou d’un if-else peut être préfixée constexpr de la façon suivante :
#include<iostream>
int main()
{
int val = rand() % 100; // evalué à l'exécution
const int cval1 = rand(); // evalué à l'exécution
const int cval2 = 50; // evalué à la compilation
constexpr int ceval = 100; // evalué à la compilation
if constexpr (val){ // erreur compilation
;
}
if constexpr (cval1) { // erreur compilation
;
}
if constexpr (cval2) { // oui
;
}
if constexpr (ceval) { // oui
;
} return 0;
}
Cela...