Autres raccourcis et opérateurs

Deux autres opérateurs permettent certains raccourcis. Le premier est l’opérateur ? :, dont la syntaxe est la suivante :

condition ? valeur1 : valeur2

L’expression condition est évaluée; si elle est non nulle, l’opé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";

à l’autre 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 l’on aurait pu faire pire, avec une fonction plus complexe que sqrt).

Autre opérateur de raccourci, la virgule. Elle permet d’enchaîner plusieurs expressions là où il n’en faudrait qu’une 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 l’ancienne valeur de j dans i. Ici les parenthèses sont obligatoires, car la virgule a une priorité plus faible que l’assignation.

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 qu’une 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 à l’œuvre les principaux raccourcis du langage C++ que sont la boucle for, la virgule (dans l’initialisation), l’affectation-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 l’appliquer soit à une variable, soit à un type, sous les formes :

taille = sizeof x;            // ou sizeof(x)taille = sizeof(float);

Dans les deux cas, l’entier unsigned retourné indique le nombre d’octets 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 d’octets occupés par une variable de type float.

Précédent Précédent Sommaire Sommaire Suivant Suivant