左值与右值

什么是左值?什么是右值?
从字面上说所谓的左值就是能在赋值符号的左边出现的数值,右值就是可以在赋值符号右边出现的数值。
其实际意义也是如此,那么哪些值可以在赋值符号左边出现,哪些可以在等号赋值符号出现的呢?
这就要从分析赋值符号左边与右边出现的值的区别着手。能被赋值的数,一定在内存里面占用有一块内存空间,并且这块空间的内容可以改变,用以存储赋予的数值。而在赋值符号右边出现的数则无此要求,因为赋值符号右边的数被赋值给赋值符号左边的数,仅仅涉及到数值,也就不涉及内存的改变。
我们来看两条语句:

k = i + 3;
i + 3 = k;

这两条语句有什么区别呢?从表面看仅仅只是顺序相反而已。我们拿到vs2015中编译一下,看看有什么结果:
这里写图片描述
可以看见,第一条语句可以通过编译,是合法的,但是第二条语句则报错说明赋值符号左边的内容不能作为左值,我们单独来看第一条语句的汇编代码:
这里写图片描述
可以看见,第一条语句底层分为三条指令:前两条语句完成赋值符号右边的加法操作,将结果存在一个临时的位置(这里是寄存器eax),最后将值赋给变量K所在的内存中。
我们再来看第二条语句,同样的执行i+3会将所得到的值先存在一个临时的内存位置,而赋值符号赋值的对象则是左边等式最终指向的地址空间,在这里,这个地址空间是不确定的,因此第二条语句是违反语法的,不能通过编译。
我们来总结一下左值与右值:
左值:在内存中有独立的内存空间,并且这块空间的内容是可变得,也就是通常所说的变量。
右值:基本所有有值的、可赋值的数都可作为右值,通常为常量(符号常量与const常量等)与变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值