Ich stieß in einem Beispiel aus der Boost-Dokumentation auf diesen Code:
%Vor%Wie süß. Boost hat eine Vorlage für Operator + =, die den Vorteil nutzt, dass das Komma in den meisten Fällen ein Operator ist. (Vorsichtig erlaubt C ++ einem Hacker nicht, " operator, " zu überladen.)
Ich schreibe auch gerne süßen Code, also habe ich mit dem Komma-Operator herumgespielt. Ich habe etwas gefunden, das mir komisch aussieht. Was denkst du, wie der folgende Code gedruckt wird?
%Vor%Sie haben es erraten. VC ++ 2012 druckt "1, 2". Was ist damit los?
[Edit: Ich hätte präzisieren sollen. Sollte gesagt haben, C ++ erlaubt nicht Betreiber "," in einer Liste von Ints überlastet werden. Oder noch besser, nichts. Der ',' Operator kann für Klassen und Enums überladen werden.]
FALL 1:
i = 1,2;
=
hat eine höhere Priorität als ,
Daher wird 1
i
zugewiesen.
Da die Zuweisung zu einem lvalue
in c++
ausgewertet wird (wird zu rvalue
in c
), wird i,2
, was zu 2
(siehe ANMERKUNG)
Fall 2:
i = (1,2);
()
hat eine höhere Priorität als =
expressions
oder operands
getrennt durch ,
operator bewertet den Wert der letzten expression
oder operand
, daher wird 2
i
HINWEIS
a comma expression
like 33,77,x,y,z
wird von von links nach rechts ausgewertet.
Das Ergebnis eines solchen Kommagedrucks ist der Wert von rechtester Ausdruck .
Beispiele
%Vor%Einfach: "=" hat höhere Priorität.
%Vor%Ist wie (i = 1), 2, was bedeutet, dass das Ergebnis des Ausdrucks 2 ist, aber verworfen wird.
%Vor%Das Ergebnis von (1,2) ist 2.
EDIT: das könnte so etwas wie
sein %Vor%funktioniert wie erwartet.
Tags und Links c++ visual-c++