#左值右值粗解

只是忽然被卡到这个概念了,做一个简单总结。后边推进到左值引用右值引用可能会好好讲一下。

左值与右值与C++中的很多基础概念一样,是自C语言传承而来的。

在C语言中:

左值通常是指既能出现在等号左边,又可以出现在等号右边的变量或表达式;右值是指只能出现在等号右边的变量或表达式。

就像我们可以将将两个数求和赋给另一个数写成 a = b + c,但是我们不能将它写做 b + c = a。

要从数学方程式的角度来看这的确是正确的,但我们是在编程,C/C++给用户规定的最为基础的操作规则是不容触犯的。

在C语言中,通常可以认为有名字的变量都是左值,而const常量等具有常性的值,以及计算过程中产生的中间值则是右值。

除非对象是位字段(嵌入式编程中常用的一种概念)或者被声明为寄存器存储,一个左值中必定可以解析出对应对象的地址。

比如我们定义一个变量

int a = 3;

这里的a即是一个左值,它在内存中占用了具体的内存空间,我们可以根据其地址找到它,并且,最重要的一点,a的值是可以改变的。

左值与右值最大的差别在于左值可以修改,而右值不可以——就像我们不能令 3 = 4 一样。

&a

所以,以上这个&a就是个右值,因为我们只是通过取地址符号临时获取了a的地址,我们并不能对其进行修改,并且所取出来的这个地址的值,我们是无法找到其地址的,即&&a不存在——这里是取两次地址,可不是右值引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云雷屯176

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值