Je suis présentement en train d'apprendre le C++ avec le livre C++ Primer et l'un des exercices du livre est:
Expliquer ce qu'est l'expression suivante n':
someValue ? ++x, ++y : --x, --y
Que savons-nous? Nous savons que l'opérateur ternaire a une priorité plus élevée que l'opérateur virgule. Avec des opérateurs binaires c'était assez facile à comprendre, mais avec l'opérateur ternaire, je suis un peu en difficulté. Avec des opérateurs binaires "ayant une priorité plus élevée" signifie que nous pouvons utiliser des parenthèses autour de l'expression de priorité plus élevée et il ne changera pas l'exécution.
Pour l'opérateur ternaire que je ferais:
(someValue ? ++x, ++y : --x, --y)
effectivement le même code qui ne m'aide pas à comprendre comment le compilateur groupe le code.
Cependant, à partir de tests avec un compilateur C++ je sais que l'expression compile et je ne sais pas ce qu'est un :
opérateur pourrait se tenir par lui-même. Ainsi, le compilateur semble interpréter l'opérateur ternaire correctement.
Puis j'ai exécuté le programme de deux façons:
#include <iostream>
int main()
{
bool someValue = true;
int x = 10, y = 10;
someValue ? ++x, ++y : --x, --y;
std::cout << x << " " << y << std::endl;
return 0;
}
Résultats:
11 10
Tandis que de l'autre main avec someValue = false
imprimés:
9 9
Pourquoi le compilateur C++ de générer le code que pour le vrai-direction générale de l'opérateur ternaire seulement incréments x
, tandis que pour les faux-direction générale de l'ternaire, il décrémente les deux x
et y
?
Je suis même allé jusqu'à mettre des parenthèses autour de la vraie-branche comme ceci:
someValue ? (++x, ++y) : --x, --y;
mais il reste encore des résultats en 11 10
.