之前编码一直用的是iter++,同事说该方式效率比较低。带着疑惑看STL源码:
// vector
_Myiter& operator++()
{ // preincrement
++*(_Mybase *)this;
return (*this);
}
_Myiter operator++(int)
{ // postincrement
_Myiter _Tmp = *this;
++*this;
return (_Tmp);
}
果不其然,++iter 前向表达式返回引用,而iter++返回的却是一临时对象。
原来前向后向重载表达式的差异,只是多了一个int参数。
// Test
class Test
{
public:
Test():val(0){}
~Test(){}
Test &operator++()
{
++val;
printf("Pre incr val:%d\n", val);
return (*this);
}
Test operator++(int)
{
Test pTmp = *this; // save
val++;
printf("Post incr val:%d\n", val);
return pTmp;
}
private:
int val;
};
// main
int main()
{
Test test;
test++;
++test;
return 0;
}
输出:
Post incr val:1
Pre incr val:2