2

我们什么时候得到“需要左值”错误...在编译 C++ 程序时???(我正在使用 VC++)

4

11 回答 11

11

“左值”是可以作为赋值目标的值。“l”代表“left”,如等号的左侧。右值是右手值并产生一个值,不能直接赋值。如果您得到“需要左值”,那么您有一个表达式在需要左值时产生右值。

例如,常量是右值但不是左值。所以:

1 = 2;  // Not well formed, assigning to an rvalue
int i; (i + 1) = 2;  // Not well formed, assigning to an rvalue.

不起作用,但是:

int i;
i = 2;

做。请注意,您可以从函数返回左值;例如,您可以返回对提供 operator=() 的对象的引用。

正如 Pavel Minaev 在评论中指出的那样,这不是语言中左值和右值的正式定义,而是试图向对在需要左值时使用右值的错误感到困惑的人提供描述。C++ 是一门有很多细节的语言;如果你想获得正式的,你应该咨询正式的参考。

于 2009-08-30T08:00:14.190 回答
3

当您尝试分配您无法分配的东西(例如标量函数的结果)时,就会发生这种情况。

于 2009-08-30T07:56:30.627 回答
2

通常,不习惯 C++ 的人可能会编写代码

if ((x+1)=72) ...

代替

if ((x+1)==72) ...

第一种意味着将 72 分配给 x+1(显然无效),而不是测试 72 和 (x+1) 之间的相等性

于 2009-08-31T21:23:58.077 回答
1

您试图在代码中的某处使用无效值作为左值。l 值是一个可以赋值的表达式。

例如,您可能有如下语句:

10 = x;

你应该有的地方:

x = 10;

尽管在您的情况下可能并不那么明显。

于 2009-08-30T07:59:55.517 回答
1

举个例子

*int a=10,b=20;

诠释 c=++(a b+1); 上面的代码会出错,因为在括号内你有一个表达式 ont 你想要做增量操作,这是不可能的。因此,在这样做之前,您必须将该值存储到某个变量中。所以上面的代码将需要“左值”错误。

于 2018-12-20T18:39:16.850 回答
0

我们给一个变量赋值。如果我们尝试做相反的事情,则会发生 L 值错误。

int x,y,z;
x=1;
y=2;
z=x+y; //Correct
x+y=z; //L-value required
于 2014-08-12T10:27:35.010 回答
0

R Value 是始终出现在赋值运算符右侧的表达式 例如:

int a = 5;//这里5是R值

L Value 是一个表达式,可以出现在赋值的左侧或右侧。当它在左侧时,它指的是可以容纳值的地方。

这里a的表达式a = 5是 L 值

当出现在右侧时,从 L 值中读取值。由于 R 值无法定位任何内存,因此它不能像 LValue 那样保存任何值,所以

5 = 6 或 5 = 一个

将是编译器错误。

于 2009-09-01T09:55:05.740 回答
0

尝试编译:

5 = 3;

你得到error: lvalue required as left operand of assignment

于 2009-08-30T08:00:02.083 回答
0

我有一个类似的问题,我发现问题是我在 if 语句中使用了单个 '=' 而不是双 '=='

左值错误:

 if (n = 100) { code } // this is incorrect and comes back with the lvalue error

正确的:

if (n == 100) { code } // this resolved my issue
于 2014-10-08T18:15:33.447 回答
0

实际上,当你不放“;”时,这个错误经常发生。并且不声明可能在给出此错误的变量之前的变量,不声明会引发此错误,因为它无法为未声明的变量赋值......聪明的孩子!

于 2019-12-11T20:00:27.433 回答
0

当您尝试操纵常量的值时会发生这种情况,它可能是不允许的增量或减量。`

#define MAX 10
void main(){
int num;
num  = ++MAX;
cout<<num;
}
于 2018-12-28T14:49:25.063 回答