2015-04-21 8 views
5

Recentemente ho visto un esempio in una recensione di overloading dell'operatore in cui hanno parlato di come l'operatore + era essenzialmente una funzione con 2 parametri.C++ Come si chiama questo uso dell'operatore +? e qual è lo scopo?

Con un po 'di frugare ho deciso di guardare a questo un po' più profondo e ha scoperto che chiamando il numero + come una funzione effettivamente funziona, solo che non come ci si aspetterebbe ... ad esempio:

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

L'assemblaggio per questo è

int result = +(second,first); 
mov   eax,dword ptr [first] 
mov   dword ptr [result],eax 

La chiamata a + sta semplicemente spostando l'ultimo parametro in eax.

Qualcuno può dirmi lo scopo di questo e/o di quello che viene chiamato?

+2

bella domanda, lo metterò nella stessa categoria con (http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-operator) – vsoftco

+0

Avendo visto la risposta, penso che sia super fiera. Mi sento un idiota completo. – jhbh

+0

In realtà non ero ironico :) È una domanda giusta e scommetto che molte persone sono prima indotte in errore da questa forma divertente, specialmente se hanno qualche background di programmazione funzionale. – vsoftco

risposta

11

Ci sono due parti nell'espressione +(second,first) - e nessuna di queste è una chiamata di funzione.

L'espressione (second, first) utilizza la rara virgola operatore, che valuta ogni espressione a sua volta e il risultato dell'espressione è l'espressione ultimo valutata.

Il + in questo caso è solo un + operatore unario, come dire +5 o -8. Quindi il risultato della tua espressione è 6, il valore di first.

È possibile, tuttavia, chiamare il operator + in questo modo: [? Qual è il nome del “->” operatore]

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

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

+0

@RichardPennington: È molto più raro del solito uso della virgola, che separa gli argomenti della funzione in una chiamata di funzione. –

+1

Non c'è 'operator +' per 'int's. (Bene, c'è una tale firma ma solo per scopi di risoluzione di sovraccarico, non può essere chiamata.) –