Comment fonctionne l'opérateur virgule en C ++?
Par exemple, si je fais:
a = b, c;
Est-ce que a finit par égaler b ou c?
(Oui, je sais que c'est facile à tester - il suffit de documenter ici pour que quelqu'un trouve la réponse rapidement.)
Mise à jour: Cette question a révélé une nuance lors de l'utilisation de l'opérateur virgule. Juste pour documenter ceci:
a = b, c; // a is set to the value of b!
a = (b, c); // a is set to the value of c!
Cette question a en fait été inspirée par une faute de frappe dans le code. Ce qui était censé être
a = b;
c = d;
Transformé en
a = b, // <- Note comma typo!
c = d;
a = (b, c);
.
a = b, c = d;
réellement comme prévu a = b; c = d;
?
b
et d
sont des évaluations de fonctions qui utilisent (et modifient) un état commun, l'ordre d'exécution n'est défini que C++17
.