C ++增量运算符

时间:2010-05-05 23:07:50

标签: c++ class templates struct operator-overloading

如何区分重载operator ++的两个版本?

const T& operator ++(const T& rhs)

哪一个?

i++;
++i;

4 个答案:

答案 0 :(得分:11)

对于非成员版本,具有一个参数的函数是前缀,而具有两个参数的函数和第二个是int的函数是后缀:

struct X {};
X& operator++(X&);      // prefix
X  operator++(X&, int); // postfix

对于成员版本,零参数版本是前缀,而采用int的单参数版本是后缀:

struct X {
    X& operator++();    // prefix
    X  operator++(int); // postfix
};

后缀运算符调用的int参数值为零。

答案 1 :(得分:10)

这些操作符是一元的,即它们不带右侧参数。

至于你的问题,如果你真的必须重载这些运算符,那么对于preincrement,使用签名const T& operator ++(),对于postincrement,const T& operator(int)。 int参数是虚拟的。

答案 2 :(得分:3)

对于postfix ++和 - 运算符,该函数必须采用伪int参数。如果它没有参数,则它是前缀运算符

答案 3 :(得分:2)

将后缀增量i++视为具有第二个(缺失)参数(即i++x)。因此,后缀增量签名具有右手参数,而前缀增量不具有。