后置式需要一个额外的临时对象,因为它必须存放迭代器的原本位置并将它返回。所以一般使用++itr,而不要使用itr++。
前置及后置代码实现:
#include <iostream>
using namespace std;
class UPInt {
public:
UPInt& operator++(); // 前置式声明
const UPInt operator++(int); // 后置式声明
UPInt& operator+=(int);
UPInt():value(0) {}
public:
int value;
};
UPInt& UPInt::operator+=(int i)
{
value += i;
return *this;
}
// 前置式实现
UPInt& UPInt::operator ++()
{
*this += 1;
return *this;
}
// 后置式实现
const UPInt UPInt::operator ++(int)
{
UPInt oldValue = *this; // 对原值进行了复制,性能较差
++(*this);
return oldValue;
}
int _tmain(int argc, _TCHAR* argv[])
{
UPInt up;
cout << up.value << endl;
cout << (up++).value << endl;
cout << (++up).value << endl;
return 0;
}