8

Perché ho sovraccaricato il operator++ per una classe iteratoreCome differenziare (durante il sovraccarico) tra forme prefissate e postfissa di operatore ++? (C++)

template<typename T> 
typename list<T>::iterator& list<T>::iterator::operator++() 
{ 
    //stuff 
} 

Ma quando cerco di fare

list<int>::iterator IT; 
IT++; 

ottengo un avvertimento circa non essendoci Postifx ++, tramite il modulo di prefisso . Come posso sovraccaricare in modo specifico i moduli prefisso/postifx?

risposta

12

Scrivere una versione dello stesso sovraccarico dell'operatore, ma dargli un parametro di tipo int. Non devi fare nulla con il valore di quel parametro.

Se sei interessato ad una cronologia di come è stata fornita questa sintassi, there's a snippet of it here.

20

http://www.devx.com/tips/Tip/12515

class Date { 
    //... 
    public: 
    Date& operator++(); //prefix 
    Date& operator--(); //prefix 
    Date operator++(int unused); //postfix 
    Date operator--(int unused); //postfix 
}; 
+5

operatori Postfix dovrebbe tornare dal valore, non riferimento. Immagino che possano esserci situazioni molto strane in cui possono restituire un riferimento, ma cosa? Non questo, perché è stato incrementato ... –

8

Postfix ha un argomento int nella firma.

Class& operator++(); //Prefix 
Class operator++(int); //Postfix 
Problemi correlati