8

Parce que j'ai surchargée la operator++ pour une classe itérateurComment différencier (en cas de surcharge) entre les formes préfixes et postfixes de l'opérateur ++? (C++)

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

Mais lorsque je tente de faire

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

Je reçois un avertissement au sujet d'être il ne postifx ++, en utilisant le formulaire de préfixe . Comment puis-je surcharger spécifiquement les formulaires prefix/postifx?

Répondre

12

Ecrivez une version de la même surcharge de l'opérateur, mais lui donner un paramètre de type int. Vous n'avez rien à faire avec la valeur de ce paramètre.

Si vous êtes intéressé par une histoire de la façon dont cette syntaxe est arrivé à, 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

opérateurs Postfix devraient retourner en valeur, pas de référence. Je suppose qu'il peut y avoir des situations très étranges où ils peuvent retourner une référence, mais quoi faire? Pas ça, parce que ça a été incrémenté ... –

8

Postfix a un argument int dans la signature.

Class& operator++(); //Prefix 
Class operator++(int); //Postfix 
Questions connexes