8

Porque he sobrecargado el operator++ para una clase de iterador¿Cómo diferenciar (cuando se sobrecarga) entre las formas prefijo y postfijo del operador ++? (C++)

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

Pero cuando trato de hacer

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

recibo una advertencia acerca de que hay ningún postifx ++, mediante el formulario de prefijo . ¿Cómo puedo sobrecargar específicamente los formularios prefijo/postifx?

Respuesta

12

Escriba una versión de la misma sobrecarga del operador, pero dele un parámetro del tipo int. No tiene que hacer nada con el valor de ese parámetro.

Si le interesa un poco de historia sobre cómo llegó esta sintaxis, 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

operadores de sufijo debe regresar por valor, no referencia. Supongo que puede haber situaciones muy extrañas en las que pueden devolver una referencia, pero ¿a qué? No esto, porque se ha incrementado ... –

8

Postfix tiene un argumento int en la firma.

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