Hello everybody.
Ma question a trait à l'opérateur virgule, qui permet de relier des expressions en assurant leur éxécution de gauche à droite, pour rendre comme valeur le résultat de l'expression la plus à droite.
1) L'opérateur virgule est une opérateur, il rend une valeur: cela est conforme à la définition d'une expression. L'ensemble des expressions reliées par l'opérateur virgule est donc lui-même une expression.
2) K&G nous explique [K&G $A7.18 page 210] que tous les effets de bords d'une expression sont réalisés avant de passer à l'expression située à droite dans le cours des éxécutions d'expressions de l'opérateur virgule.
3) La définition de l'opérateur ++ nous dit: postfixé ==> incrémentation après avoir rendu la valeur dans l'expression, préfixé ==> incrémentation avant de rendre la valeur dans l'expression.
Donc, comment se fait-il que les deux codes:
int n=0, x=2; ++x, n=x<3;
et
int n=0, x=2; x++, n=x<3;
donnent strictement le même résultat, à savoir la valeur zéro pour n?
Normalement, dans le deuxième cas, x aurait du être incrémenté APRES l'expression, et on devrait donc avoir la valeur 1 pour n.
Et schtroumph.
Merci pour toute réponse.
Partager