++i和i++理解
参考:https://blog.csdn.net/weixin_47289438/article/details/108639234
https://blog.csdn.net/weixin_45640264/article/details/115366070
(1)区别
① 实现方式:
++i:取i的地址,把他装入寄存器,然后增加内存中的值。
i++: 先取i的地址,增加他的内容,然后把它放在寄存器中;
② 能否作为左值:
++i 返回引用形式,可以获得地址,可以作为左值。
i++ 因为返回const类型的对象,所以不能作为左值;

③效率:
i++先读取i的地址,然后i自增1。i++比++i多了一个取值存储,而且还调用了前缀++。
++i直接自增1,效率最高。
首先解释下什么是左值:
左值是对应内存中有确定存储地址的对象的表达式的值
一般来说,左值是可以放到赋值符号左边的变量。但能否被赋值不是区分左值与右值的依据。
比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否**允许取地址&**运算符获得对应的内存地址。比如,
(2)++i和i++实现源码
如上所示,i++ 最后返回的是一个临时变量,而临时变量是右值。
注意:
i = i + 1先读取等号右边i的地址,计算i+1的值,然后读取等号左边i的地址,最后将等号右边的值传给等号左边的值。
i+=1先读取等号左边i的地址,然后计算i+1的值,最后将得到的值传给左边的i,因为i的地址已经得到,故省去了传值的过程。
自增Eg: