Как различить (при перегрузке) префиксную и постфиксную формы оператора ++? (C ++) - PullRequest
8 голосов
/ 21 мая 2009

Поскольку я перегрузил operator++ для класса итератора

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

Но когда я пытаюсь сделать

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

Я получаю предупреждение об отсутствии postifx ++, используя префикс формы. Как конкретно перегрузить формы префикса / postifx?

Ответы [ 4 ]

20 голосов
/ 21 мая 2009

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
};
12 голосов
/ 21 мая 2009

Написать версию той же перегрузки оператора, но дать ей параметр типа int. Вам не нужно ничего делать со значением этого параметра.

Если вас интересует какая-то история появления этого синтаксиса, здесь есть фрагмент этого кода .

8 голосов
/ 21 мая 2009

Postfix имеет аргумент int в подписи.

Class& operator++();    //Prefix 
Class  operator++(int); //Postfix 
0 голосов
/ 22 августа 2011

все об операторе перегрузка http://www.parashift.com/c++-faq-lite/operator-overloading.html

...