为什么i++不能作为左值

今天Mayuyu带大家一起来搞清楚i++++i的区别。或许你在C++编程中经常使用它们,但是却不知道它们背后的原

理。同样Mayuyu也不知道,那么今天很有必要搞清楚它们。现在就让Mayuyu带领大家一起学习吧。。。

 

首先,说到i++++i的区别,那么就先要了解它们的底层实现细节。下面是它们的实现代码

 

对于i++

int tmp;
tmp = i;
i = i + 1;
return tmp;


而对于++i则是

i = i + 1;
return i;

这样就很明确了,由于tmp是一个编译器自动分配的临时变量,并不是程序中定义的变量,所以不能对它进行寻址,所

以也就不能把i++作为左值使用,所以诸如i++=5此类的用法是错误的。

 

现在我们来了解右值和左值的区别。

 

变量和文字常量都有存储区,并且有相对应的类型,它们的区别在于变量是可寻址的,对于每一个变量有两个值与其

关联,这两个值分别是数据值地址值

 

数据值:存在某个内存地址中,有时这个值也被称为对象的右值,我们可以认为右值的意思就是被读取的意思,文字

       常量和变量都可以作为右值使用。

 

地址值:即存储数据值的那块内存地址,我们常称它为左值,常量不能作为左值使用。

 

有时候我们会问i++++i哪个使用起来速度更快,其实宏观看来这个只能算是有微小的差别,通过i++++i的原理

我们知道,i++在使用过程中每次会产生一个临时变量,这样系统开销稍大点,时间对应也会比++i慢点。

 

 

更多资料:http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值