对于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
参数。