c++左值与右值

本文探讨了C++编程语言中的左值(lvalue)和右值(rvalue)概念,指出它们并非简单地根据等式位置划分,而是与赋值、表达式和内存中的位置相关。左值能被赋值且可以取地址,如变量;右值则不可赋值,如字面值和临时变量。理解这一区分有助于深入理解C++的底层机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学c++过程中,左值与右值的概念是一道绕不过去的坎,因此就想写一些自己的理解。

左值(lvalue)与右值(rvalue)是C++语法中的术语(terms),第一次看到这两个词的时候,很自然就认为在一个表达式中,在等号左边的就是左值,在等号右边的就是右值。如果你们第一次看到这两个词也这么认为的话,那我要恭喜你们,说明你们离理解左值与右值的概念仅一步之遥了。也许有人会说这纯粹是调侃,其实不然,等我把前面说的话稍微升华一下,你就会发现其实也不无道理。

       前面说我第一次理解左值右值的时候,我提到了几个关键的词,分别是“表达式”,“等号”,“左边”,“右边”。你也许会很困惑我为什么要强调这几个词,其实在说左右值的时候,我们已经很自然的给它添加了一些限制。

首先,“表达式”就是左值与右值出现的地点,也就是说,无论我们何时谈到左值和右值,都必须与表达式联系起来。只有在表达式中,左右值才能体现它该有的属性意义。

其次,等号可以很自然让我们区分什么是左,什么是右。当然左值与右值的概念不可能仅仅只是靠等号的左右去区分的。但我们可以想想,等号左边是用来干嘛的?等号右边是用来干嘛的?聪明的你肯定会回答,等号左边是用来保存右边的值,等号右边是用来把值给左边的,即左边是用来被赋值的,右边用来赋值的。当想明白这点之后我们就可以假设,左值就是用来被赋值的,右值是用来赋值的。可是很快你就发现,如果这样想的话那岂不就一个值即可当左值,又可当右值?当我们将其放在左边,他就是左值,放在右边,即是右值,这岂不自相矛盾?要是没等号,我们要怎么区分左右值?的确是这样,所以我们回顾下我们目前为止所理解的左右值概念就会发现,对于“左值就是用来被赋值的”可以换成“能被赋值的就是左值”这样去描述,而“右值是用来赋值的”可以换成“不能被赋值的就是右值”这样去描述,这样我们就可以发现一切都

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值