2015-04-21 8 views
5

Kürzlich sah ich ein Beispiel in einer Überladung von Operatoren, wo sie darüber sprachen, wie der + Operator im Wesentlichen eine Funktion mit 2 Parametern war.C++ Wie wird dieser Operator + aufgerufen? und was ist der Zweck?

Mit etwas Stossen entschied ich mich an dieser ein wenig tiefer zu schauen und festgestellt, dass in der Tat Arbeit + wie eine Funktion aufgerufen wird, wie nicht nur die man erwarten würde ... zB:

int first = 6; 
int second = 9; 
int result = +(second,first);//result=6 

Die Montage dafür ist

Der Aufruf an + ist einfach den letzten Parameter in eax verschieben.

Kann mir jemand den Zweck dieser und/oder wie heißt es?

+2

schöne Frage, ich habe es in der gleichen Kategorie gestellt werden mit (http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-operator) – vsoftco

+0

Nachdem ich die Antwort gesehen habe, denke ich, dass das super fair ist. Ich fühle mich wie ein kompletter Idiot. – jhbh

+0

Ich war eigentlich nicht ironisch :) Es ist eine faire Frage, und ich wette, dass viele Leute zuerst durch diese lustige Form irregeführt werden, besonders wenn sie einen funktionalen Programmierhintergrund haben. – vsoftco

Antwort

11

Der Ausdruck +(second,first) besteht aus zwei Teilen - und keiner davon ist ein Funktionsaufruf.

Der Ausdruck (second, first) verwendet den seltenen Kommaoperator, die jeden Ausdruck der Reihe nach und das Ergebnis des Ausdrucks auswertet ist die letzten ausgewertet Expression.

Die + in diesem Fall ist nur ein einstelliger + Operator, wie +5 oder -8 sagen. Also das Ergebnis Ihres Ausdrucks ist 6, der Wert von first.

Sie können jedoch, rufen Sie die operator + wie folgt aus: [? Was ist der Name der „->“ Operator]

int result = operator +(second, first); 
+1

Selten? for (p = root, last = NULL; p! = NULL; last = p, p = p-> next) ;-) –

+0

@RichardPennington: Es ist viel seltener als die übliche Verwendung von Komma, das Funktionsargumente trennt in einem Funktionsaufruf. –

+1

Es gibt keinen 'Operator +' für 'int's. (Nun, es gibt eine solche Signatur, aber nur für Überladungsauflösungszwecke; sie kann nicht aufgerufen werden.) –