C / C ++ Kommaoperator verwirrt mich. Sprachanwälte?

8

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.]

    
Jive Dadson 04.10.2012, 17:22
quelle

2 Antworten

13

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)

führt

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

zugewiesen

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%     
Anirudh 29.09.2013, 14:12
quelle
5

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.

    
Christian Stieber 04.10.2012 17:25
quelle

Tags und Links