C++中提到的左值是什么意思

 我来答
1172490637
推荐于2017-10-12 · TA获得超过562个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:127万
展开全部

在C语言中,左值(left value),指在赋值表达式(assignment expression)中作为将要赋予值的地址的表达式。


例如在赋值语句

i = 10;

中i就是一个左值,它必须是一个变量,或是一个解引用的指针(如下)

int *p;
*p = 10;


在C的yacc语法中,赋值表达式被这样定义

assignment_expression
: conditional_expression
| unary_expression assignment_operator assignment_expression
;

也就是说,在纯语法的层面,左值必须是一元表达式

psxf91
推荐于2017-09-17 · TA获得超过428个赞
知道小有建树答主
回答量:558
采纳率:100%
帮助的人:486万
展开全部
首先左值和右值是表达式。左值是可以放在赋值符号=左边,逻辑上表示一个位置,可以赋予值。而右值是可以放在赋值符号右面,逻辑上表示一个值,因为不是个位置,那么不能被赋值。所以左值一定是右值,右值不一定是左值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
plmday
2014-02-17 · TA获得超过474个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:243万
展开全部
以下表述引自C++标准:

An lvalue (so called, historically, because lvalues could appear on the left-hand side of an assignment expression) designates a function or an object. [ Example: If E is an expression of pointer type, then *E is an lvalue expression referring to the object or function to which E points. As another example, the result of calling a function whose return type is an lvalue reference is an lvalue. — end example ]

可以看到,之所以称为左值有历史原因,因为左值可以出现在赋值表达式的左边(圆括弧里面的表述)。定义左值的特征是“designates a function or an object”,指代一个函数或一个对象。这里举了指针的例子。一个更简单的例子是(未加const修饰的)变量。注意变量是左值,但可以出现在赋值表达式的左边,也可以出现在右边(所以单纯地将左值定义为出现在赋值表达式左边的值是不准确的)。当一个左值出现在赋值表达式右边的时候,会被隐式地转换为右值,即其所指代的函数或对象。所以当一个变量(或者反引用的指针如上举*E)出现在赋值表达式右边的时候,你可以把它看作是其指代的(右)值。而当它出现在赋值表达式的左边的时候,你可以把它看作其指向的内存空间。另外,不是所有的左值都可以出现在赋值表达式的左边的,也就是说不是所有的左值都可以被赋值。比如加const修饰的变量是左值,但是该变量不能出现在赋值表达式的左边。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
与子如初见
2014-02-17 · TA获得超过1638个赞
知道小有建树答主
回答量:1117
采纳率:100%
帮助的人:798万
展开全部
左值就是运算符左边的表达式的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Hilary29003
2014-02-17
知道答主
回答量:8
采纳率:0%
帮助的人:1.1万
展开全部
可以放在赋值运算符的左边的,可被赋值的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式