++a表示取a的地址,增加它的内容,然后把值放在寄存器中;
a++表示取a的地址,把它的值装入寄存器,然后增加内存中的a的值;
前置++和后置++,有4点不同:
- 返回类型不同
- 形参不同
- 代码不同
- 效率不同
1、返回类型
前置++的返回类型是&,后置++的返回类型const值。这意味着,前置++返回的是左值(可以被修改,也就是说可以对它进行前置++、后置++、赋值等操作),后置++返回的是右值(不可以被修改,自然就不能对它进行前置++、后置++、赋值等操作)。
2、形参不同
前置++与后置++的操作符重载函数,函数原型必须不同。否则就违反了“重载函数必须拥有不同的函数原型”的语法规定。
虽然前置++与后置++的返回类型不同,但是返回类型不属于函数原型。为了绕过语法限制,只好给后置++增加了一个int形参。
3、代码不同
前置++的实现比较简单,自增之后,将*this返回即可。需要注意的是,一定要返回*this。
后置++的实现稍微麻烦一些。因为要返回自增之前的对象,所以先将对象拷贝一份,再进行自增,最后返回那个拷贝。
4、效率不同
如果不需要返回自增之前的值,那么前置++和后置++的计算效果都一样。但是,我们仍然应该优先使用前置++,尤其是对于用户自定义类型的自增操作。
前置++的效率更高,理由是:后置++会生成临时对象。