注册 登录
编程论坛 C++教室

大家来说说对左值和右值的理解吧

waynell95 发布于 2010-08-28 10:41, 820 次点击
左值和右值的概念我认为不是用能在=号左边和右边说清楚的,哪位能清晰并且简单地描述啊?
6 回复
#2
weble2010-08-28 11:11
左值就好比你的名字,右值就是你的身体
#3
ToBeOOP2010-08-28 11:41
我的理解是左值可以是一个容器,可以用来装同类型的数据,也可以直接将左值赋给另一个同类型的左值,而右值则为定值,不能进行修改,是一个常量...
#4
pangding2010-08-28 12:46
标准里对左值有如下描述:
An lvalue is an expression with an object type or an incomplete type other than void;53)
if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
When an object is said to have a particular type, the type is specified by the lvalue used to
designate the object. A modifiable lvalue is an lvalue that does not have array type, does
not have an incomplete type, does not have a const-qualified type, and if it is a structure
or union, does not have any member (including, recursively, any member or element of
all contained aggregates or unions) with a const-qualified type.

其实可以理解成,左值是对象的引用,右值一般不受限制。任何表达式不是左值就是右值,所以只要别搞混就行了。
我觉得一般的编程里不太用这个概念,如果出了語法错误,自己想想应该都能改过来才对。实在弄不清楚就往后放放,过一段间自己就能感觉出来了。就像你可能说不形容词和副词的定义,甚至连它们的区别也表述不了。但是在遇到的时候还是能分出来,能分出来才是目的,概念什么的不重要。(除非你是语言工作者)
#5
南国利剑2010-08-29 00:16
简单的说,
左值既可以出现在赋值号的左边又可以出现在赋值号的右边。
而右值只能出现在赋值号的右边。

一个表达式的运行结果必定会产生一个左值。
#6
ToBeOOP2010-08-29 09:07
南国利剑上来把贴都塞了一遍呢....
#7
BlueGuy2010-08-31 17:13
以下是引用南国利剑在2010-8-29 00:16:11的发言:

简单的说,
左值既可以出现在赋值号的左边又可以出现在赋值号的右边。
而右值只能出现在赋值号的右边。

一个表达式的运行结果必定会产生一个左值。
不太清楚的问题应该先查一下资料吧?
1