Deux autres opérateurs permettent certains raccourcis. Le premier est lopérateur ? :
, dont la syntaxe est la suivante :
condition ? valeur1 : valeur2
Lexpression condition
est évaluée; si elle est non nulle, lopération renvoie valeur1
sinon valeur2
. Par exemple, lécriture suivante :
z = ( x < y ? x : y);
place le plus petit de x ou de y dans z (les parenthèses sont facultatives mais recommandées). Ici cela ne sert à rien, car on aurait pu aussi bien écrire :
if (x < y) z = x; else z = y;
ce qui est nettement plus clair. Cela permet toutefois déviter certaines répétitions dans des expressions un peu complexes. Par exemple, on comparera :
cout << "La plus petite racine est " << sqrt(x < y ? x : y) << ".\n";
à lautre possibilité :
cout << "La plus petite racine est ";if (x < y) cout << sqrt(x); else cout << sqrt(y);cout << ".\n";
déjà nettement plus lourde (et lon aurait pu faire pire, avec une fonction plus complexe que sqrt).
Autre opérateur de raccourci, la virgule. Elle permet denchaîner plusieurs expressions là où il nen faudrait quune en principe ; les expressions sont calculées de gauche à droite, et le résultat est celui de la dernière, les résultats intermédiaires étant perdus.
Par exemple, lécriture suivante :
j = (i = j, 100);
place la valeur 100 dans j et lancienne valeur de j dans i. Ici les parenthèses sont obligatoires, car la virgule a une priorité plus faible que lassignation.
En pratique, lécriture précédente aurait été plus claire sous la forme :
i = j; j = 100;
mais on peut parfois éviter des longueurs avec la virgule, en remplaçant deux instructions (ou plus) par une seule. Cela est particulièrement utile dans une boucle for
, dont la partie initialisation et la partie incrémentation ne doivent avoir quune seule instruction. Par exemple :
for (i = 0, somme = 0; i <= 100; somme += i++);cout << somme << endl;
calcule puis affiche la somme de tous les nombres de 1 à 100 (exercice : le vérifier)(ici endl provoque un saut de ligne, voir chapitre 9). Dans cet exemple, on voit à luvre les principaux raccourcis du langage C++ que sont la boucle for, la virgule (dans linitialisation), laffectation-addition +=
, et la post-incrémentation (de i). Sans ces outils, il aurait fallu écrire :
somme = 0;for (i = 0; i <= 100; i = +1) somme = somme + i;cout << somme << endl;
ce qui aurait été plus clair mais moins rapide et moins concis.
Nous terminons avec un opérateur bien utile dans des opérations de bas niveau, nommé sizeof
. Il se présente en réalité comme une fonction, mais on peut lappliquer soit à une variable, soit à un type, sous les formes :
taille = sizeof x; // ou sizeof(x)taille = sizeof(float);
Dans les deux cas, lentier unsigned
retourné indique le nombre doctets occupés par la variable, ou par une variable du type indiqué, en mémoire. Par exemple, si x est du type char on obtiendra 1, mais 4 si x est du type long
; de même, dans la deuxième ligne on obtiendra 4, qui est le nombre doctets occupés par une variable de type float
.
Précédent | Sommaire | Suivant |