如何区分重载operator ++的两个版本?
const T& operator ++(const T& rhs)
哪一个?
i++;
++i;
答案 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
)。因此,后缀增量签名具有右手参数,而前缀增量不具有。