对于int
类型变量a可以如下操作
++a;
a++;
--a;
a--;
++
和--
分别都有前置式(操作符在前)、后置式(操作符在后)
对于自定义类型,++
和--
的重载需要区分前置式和后置式,如下
class Element
{
public:
Element(int value) :value_(value) {}
Element& operator++()
{
++value_;
return *this;
}
const Element operator++(int)
{
Element cache = *this;
++value_;
return cache;
}
Element& operator--()
{
--value_;
return *this;
}
const Element operator--(int)
{
Element cache = *this;
--value_;
return cache;
}
private:
int value_;
};
Element a(0);
auto b = a++; // b.value_ = 0; a.value_ = 1
auto c = ++++a; // c.value_ = 3; a.value_ = 3
auto d = a++++; // compile error
前置式返回的是引用&
,是左值;
后置式返回的是常量对象,是右值,同时带有一个不使用的int
参数。