STL ++iter与iter++区别
程序员文章站
2022-05-27 22:58:49
...
之前编码一直用的是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
推荐阅读