如何区分(重载时)operator++ 的前缀和后缀形式? (C++)

问题描述 投票:0回答:4

因为我已经重载了迭代器类的

operator++

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

但是当我尝试这样做时

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

我收到一条关于没有使用前缀形式的 postifx

++
的警告。如何专门重载 prefix/postifx 表单?

c++ operator-overloading postfix-operator prefix-operator
4个回答
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
};

12
投票

编写相同运算符重载的版本,但为其指定类型为

int
的参数。您不必对该参数的值执行任何操作。

如果您对这种语法的产生历史感兴趣,这里有一个片段


8
投票

Postfix 签名中有一个 int 参数。

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

0
投票

很多关于运算符重载的信息可以在 运算符重载,C++ 常见问题解答


编辑:
原来的链接 (http://www.parashift.com/c++-faq-lite/operator-overloading.html) 同时解析上面链接的集合。

© www.soinside.com 2019 - 2024. All rights reserved.