C++中提到的左值是什么意思
5个回答
展开全部
在C语言中,左值(left value),指在赋值表达式(assignment expression)中作为将要赋予值的地址的表达式。
例如在赋值语句
i = 10;
中i就是一个左值,它必须是一个变量,或是一个解引用的指针(如下)
int *p;
*p = 10;
在C的yacc语法中,赋值表达式被这样定义
assignment_expression
: conditional_expression
| unary_expression assignment_operator assignment_expression
;
也就是说,在纯语法的层面,左值必须是一元表达式
展开全部
首先左值和右值是表达式。左值是可以放在赋值符号=左边,逻辑上表示一个位置,可以赋予值。而右值是可以放在赋值符号右面,逻辑上表示一个值,因为不是个位置,那么不能被赋值。所以左值一定是右值,右值不一定是左值。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以下表述引自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修饰的变量是左值,但是该变量不能出现在赋值表达式的左边。
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修饰的变量是左值,但是该变量不能出现在赋值表达式的左边。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
左值就是运算符左边的表达式的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以放在赋值运算符的左边的,可被赋值的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询