2010-05-05 13 views
10

Come distinguere tra l'overloading delle 2 versioni dell'operatore ++?Operatore di incremento C++

const T& operator ++(const T& rhs) 

quale?

i++; 
++i; 
+13

cosa ha da dire il tuo libro di testo C++ sull'argomento? –

risposta

10

Questi operatori sono unari, cioè non prendono un parametro sul lato destro.

Per quanto riguarda la domanda, se davvero si deve sovraccaricare questi operatori, per il preincremento utilizzare la firma const T& operator ++() e per il postincremento, const T& operator(int). Il parametro int è un dummy.

+3

Possono essere funzioni non membri. –

+0

@gf True. Ma quella non sarebbe la mia prima scelta per gli operatori di incremento. (La mia prima scelta sarebbe quella di non sovraccaricare gli operatori, comunque.) –

+2

@Daniel: Non hai scelta se vuoi scrivere un iteratore di C++ o un oggetto simile allo stesso iteratore. –

3

per il suffisso ++ e - operatori, la funzione deve prendere un int argomento fittizio. se non ha argomenti, allora è l'operatore prefisso

2

Si pensi all'aumento postfix i++ come a un secondo parametro (mancante) (ad esempio i++x). Quindi la firma di incremento postfissa ha un parametro di destra mentre l'incremento di prefisso no.

11

Per le versioni terzi, una funzione con un parametro è prefisso in una funzione con due parametri e la seconda essendo int è postfix:

struct X {}; 
X& operator++(X&);  // prefix 
X operator++(X&, int); // postfix 

Ai utente-versioni, la versione zero parametro è prefisso e la versione un parametro tenendo int è postfix:

struct X { 
    X& operator++(); // prefix 
    X operator++(int); // postfix 
}; 

la int parametro chiamate degli operatori postfissi avrà valore zero.

+0

@gf aggiungi un esempio e questa sarebbe la migliore risposta –

+0

@Caspin: buon punto, fatto. –