参考链接(链接讲的很全):C++前置++和后置++的区别
对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理由是 前置自增 (++i) 通常要比后置自增 (i++) 效率更高。
class Age { public: Age& operator++() //前置++ { ++i; return *this; } const Age operator++(int) //后置++ { Age tmp = *this; //tmp是一个临时对象,会造成一次构造函数和一次析构函数的额外开销。++(*this); //利用前置++ return tmp; } Age& operator=(int i) //赋值操作 { this->i = i; return *this; } private: int i; };
1.返回值类型的区别
前置++的返回类型是(引用)Age&,后置++的返回类型const Age(临时对象)。这意味着,前置++返回的是左值,后置++返回的是右值。
2.形参的区别
前置++没有形参,而后置++有一个int形参,但是该形参也没有被用到。很奇怪,难道有什么特殊的用意?
其实也没有特殊的用意,只是为了绕过语法的限制。
前置++与后置++的操作符重载函数,函数原型必须不同。否则就违反了“重载函数必须拥有不同的函数原型”的语法规定。
3.代码实现的区别
前置++的实现比较简单,自增之后,将this返回即可。需要注意的是,一定要返回this。
后置++的实现稍微麻烦一些。因为要返回自增之前的对象,所以先将对象拷贝一份,再进行自增,最后返回那个拷贝。
4.效率的区别