C++增量运算符

Bet*_*moo 10 c++ templates struct class operator-overloading

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

const T& operator ++(const T& rhs)
Run Code Online (Sandbox Code Playgroud)

哪一个?

i++;
++i;
Run Code Online (Sandbox Code Playgroud)

Geo*_*che 11

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

struct X {};
X& operator++(X&);      // prefix
X  operator++(X&, int); // postfix
Run Code Online (Sandbox Code Playgroud)

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

struct X {
    X& operator++();    // prefix
    X  operator++(int); // postfix
};
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*nas 10

这些运算符是一元的,即它们不采用右侧参数.

至于你的问题,如果你真的必须重载这些操作符,对于preincrement使用签名const T& operator ++(),并为后增量,const T& operator(int).int参数是一个虚拟的.

  • 它们可以是非成员函数. (3认同)
  • @Daniel:如果你想编写一个C++'ish iterator或iterator-like的对象,你别无选择. (2认同)