https://blog.csdn.net/TwoTon/article/details/123640246
class Person
{
public:
Person& operator++()
{
++i;
return *this;
}
const Person operator++(int)
{
Person temp = *this;
++(*this);
return temp;
}
private:
int i = 0;
};
int main()
{
Person p;
p++;
++p;
}
++a的返回类型为什么是引用呢?
这样做的原因应该就是:与内置类型的行为保持一致。前置++返回的总是被自增的对象本身。因此,++(++a)的效果就是a被自增两次。
a++的返回类型为什么要是const对象呢?
有两个原因:
如果不是const对象,a(++)++这样的表达式就可以通过编译。但是,其效果却违反了我们的直觉 。a其实只增加了1,因为第二次自增作用在一个临时对象上。
另外,对于内置类型,(i++)++这样的表达式是不能通过编译的。自定义类型的操作符重载,应该与内置类型保持行为一致 。
a++的返回类型如果改成非const对象,肯定能通过编译,但是我们最好不要这样做。