++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++ii++实现源码

如上所示,i++ 最后返回的是一个临时变量,而临时变量是右值。


注意

i = i + 1先读取等号右边i的地址,计算i+1的值,然后读取等号左边i的地址,最后将等号右边的值传给等号左边的值。

i+=1先读取等号左边i的地址,然后计算i+1的值,最后将得到的值传给左边的i,因为i的地址已经得到,故省去了传值的过程。


自增Eg:

全部评论

相关推荐

评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务