Je peux écrire le code if(1) x++, y++;
au lieu de if(1) {x++; y++;}
, mais dans certains cas, cela ne fonctionne pas (voir ci-dessous). Ce serait bien si vous m'en parliez.
int x = 5, y = 10;
if (x == 5) x++, y++; // It works
if (x == 5) x++, return 0; // It shows an error
La même chose s'applique aux boucles for
:
for (int i = 0; i < 1; i++) y++, y += 5; // It works
for (int i = 0; i < 1; i++) y++, break; // Does not work
En effet, return
et break
sont des instructions et non des expressions. En tant que tel, vous ne pouvez en aucun cas l'utiliser dans une autre expression. if
et les autres sont également des déclarations.
Cependant, vous pouvez réécrire votre expression (pour return
) afin qu'elle ne soit pas imbriquée dans une expression - bien que je ne recommande pas d'écrire du code comme celui-ci:
return x++, 0;
Vous ne pouvez pas faire cela pour break
car il n'accepte pas d'expression.
L'opérateur virgule est pour les expressions.
L'instruction return
et les autres instructions pures ne sont pas des expressions.
L'opérateur virgule est un opérateur binaire qui prend deux valeurs. De cette façon, c'est pareil que +
ou *
. Tandis que +
ajoute deux valeurs et renvoie le résultat, et *
multiplie deux valeurs et renvoie le résultat, l'opérateur de virgule ignore simplement la valeur à gauche et renvoie la valeur à droite.
2 + 5
a la valeur 7
2 * 5
a la valeur 10
2 , 5
a la valeur 5
, simplement l'opérande situé à droite de l'opérateur.
Et donc vous ne pouvez pas écrire 2,break
pour la même raison que vous ne pouvez pas écrire 2+break
. Parce que la pause est une déclaration, pas une valeur.
Quelle est l'utilisation d'un opérateur binaire qui ignore l'un de ses opérandes? L'opérateur de virgule ignore la valeur de l'opérande gauche, mais l'expression est toujours évaluée. Tous les effets secondaires de cette expression sont toujours réalisés. Considérer:
i = 2;
j = 5;
i++, j++;
D'abord, les deux expressions sont évaluées. i++
renvoie la valeur 2
, puis incrémente i
. j++
renvoie la valeur 5
, puis incrémente j
. Enfin, l'opérateur de virgule est appliqué à ces deux valeurs: 2,5
qui ignore le 2
et retourne le 5
.