Frage

Der Komma-Betreiber garantiert die Bewertungsauftrag von links nach rechts.

[n3290: 5.18/1]: Die Komma-Betreibergruppen gruppieren nach rechts.

expression:
   assignment-expression
   expression , assignment-expression

Ein durch ein Komma getrennter Ausdrücke wird von links nach rechts bewertet; Der linke Ausdruck ist ein verworfener Wertausdruck (Klausel 5). Jede Wertberechnung und Nebenwirkung, die mit der linken Expression zugeordnet ist, wird vor jeder Wertberechnung und Nebenwirkung sequenziert, die mit der rechten Expression verbunden sind. Die Art und der Wert des Ergebnisses sind Art und Wert des richtigen Operanden. Das Ergebnis hat die gleiche Wertkategorie wie der rechte Operand und ist ein Bitfeld, wenn sein rechter Operand ein GLVALUE und ein Bitfeld ist.

Die einzige andere Klausel zum Bediener erwähnt die Bewertungsauftrag nicht. Es scheint also, dass dies immer noch der Fall ist, wenn der Bediener überlastet wurde.

Aber weiter oben im allgemeinen Spiel in Bezug auf Ausdrücke wird natürlich angegeben, dass sich die Regeln ändern, wenn Sie Operatoren überlasten:

[n3290: 5/2]: [ Notiz: Operatoren können überlastet werden, dh angegeben, wenn sie auf Ausdrücke des Klassentyps (Klausel 9) oder Aufzählungstyp (7.2) angewendet werden. Die Verwendung überlasteter Operatoren wird wie in 13.5 beschrieben in Funktionsaufrufe umgewandelt. Überlastete Betreiber befolgen die in Abschnitt 5 festgelegten Regeln für die Syntax, die Anforderungen der Operandentyp, der Wertkategorie und der Bewertungsauftrag werden jedoch durch die Regeln für den Funktionsaufruf ersetzt. Beziehungen zwischen Operatoren, wie z. ++aBedeutung a+=1, werden für überlastete Betreiber nicht garantiert (13,5) und für Operanden vom Typ nicht garantiert bool. - Hinweis ]

Dies ist jedoch nicht normativ Text. Gibt es irgendwelche normativ Text definieren diese Regel oder könnte ein konformer Compiler sie ignorieren?

War es hilfreich?

Lösung

Ich habe nur den 03 -Standard zur Hand, aber 5/3 sagt: "Klausel 5 definiert die Auswirkungen von Operatoren, wenn sie auf Typen angewendet werden, für die sie nicht überlastet wurden."

Daher gilt die gesamte Klausel 5, einschließlich 5.18/1, nur für die integrierten Operatoren und für keine überlastete Funktion.

(Ein konformer Compiler konnte die Operanden immer zu einem überlasteten bewerten operator ,() aber von links nach rechts.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top