Question

L'opérateur virgule garanties de gauche à droite ordre d'évaluation.

[n3290: 5.18/1]: Les groupes opérateur virgule de gauche à droite

.
expression:
   assignment-expression
   expression , assignment-expression

Une paire d'expressions séparées par une virgule est évaluée de gauche à droite ; l'expression de gauche est une expression de valeur mis au rebut (clause 5). Chaque calcul de la valeur et l'effet secondaire associé à l'expression gauche est séquencé avant tout effet de calcul de valeur et latérale associée avec la bonne expression. Le type et la valeur du résultat sont les le type et la valeur de l'opérande droit; le résultat est de la même valeur catégorie que son opérande droit, et est un peu champ si son opérande droit est un glvalue et un champ binaire.

La seule autre clause de l'opérateur ne mentionne pas l'ordre d'évaluation. Donc, il semble que ce soit toujours le cas lorsque l'opérateur a été surchargé.

Mais, plus haut, dans le Spiel général en ce qui concerne les expressions, bien sûr, il est précisé que les règles changent lorsque vous surchargez les opérateurs:

[n3290: 5/2]: [ Note: Les opérateurs peuvent être surchargés, qui est, étant donné ce qui signifie lorsqu'il est appliqué à des expressions de type de classe (article 9) ou type d'énumération (7.2). Les utilisations des opérateurs surchargées sont transformés dans les appels de fonction comme décrit dans 13,5. opérateurs Surchargé Obey les règles de syntaxe spécifiées à l'article 5, mais les exigences de type d'opérande, catégorie de valeur, et l'ordre d'évaluation sont remplacés par le règles pour appel de fonction. Les relations entre les opérateurs, tels que ++a ce qui signifie a+=1, ne sont pas garantis pour les opérateurs surchargées (13,5), et ne sont pas garantis pour opérandes de type bool. Note -end ]

Cependant, ceci est texte non normatif. Y at-il normatif texte définissant cette règle, ou pourrait un compilateur compatible ignorer?

Était-ce utile?

La solution

Je n'ai que le 03 standard pour la main, mais il dit 5/3 « L'article 5 définit les effets des opérateurs lorsqu'ils sont appliqués à des types pour lesquels ils ne sont pas surchargées ».

Donc tout l'article 5, y compris 5,18 / 1, applique uniquement à l'intégré des opérateurs et non à une fonction surchargée.

(Un compilateur compatible peut toujours évaluer les opérandes à une surcharge operator ,() gauche à droite si.)

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