Question

Je suis très convaincu par l'explication que j'ai trouvé que dit que i = ++i n'est pas non défini dans la mesure du C ++ 0x concerne, mais je suis incapable de juger si le comportement de i += ++i est bien définie ou non. Tous les preneurs?

Était-ce utile?

La solution

Le raisonnement qui fait également i = ++i bien définis peuvent être utilisés pour prouver que i += ++i doit être bien définie.

i += ++i équivaut à i += (i += 1) et les nouvelles règles de séquençage exigent que la cession a lieu avant la valeur de calcul de la sous-expression de i += 1.
Cela signifie que le résultat de l'expression i += ++i doit être le même que pour i = 2 * i + 1.

Edit:. Je dois revoir ma réponse, parce que le comportement est indéfini après tout
Le comportement de i += ++i est indéfini, parce que la valeur calcul de la sous-expressions i (argument côté gauche) et ++i sont non séquencée par rapport à l'autre et l'un d'entre eux contient une mise à jour de la i de l'objet.

Ce n'est pas un problème pour le i = ++i d'expression, parce qu'il ya la i sur le côté gauche ne subit pas une conversion lvalue à rvalue, qui ne se produit dans le cas de i += ++i.


D'un côté Nota: Ne pas écrire un tel code dans un projet sérieux. Il se fie trop à savoir exactement les règles de séquençage et il y aura beaucoup de gens qui soit ne comprennent pas correctement les règles de séquençage, ne connaissent pas la modification des règles qui est le résultat de la RD 637 ou se disjoncté par manque quelques importants aspects de l'expression en question (comme me est arrivé lors de la composition de la première révision de cette réponse).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top