“需要l值”错误

时间:2009-08-30 07:53:12

标签: c++ lvalue rvalue

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

11 个答案:

答案 0 :(得分:11)

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

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

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 ++是一种具有许多细节的语言;如果你想要正式的,你应该咨询正式的参考。

答案 1 :(得分:2)

当您尝试分配无法分配的某些内容(例如标量函数的结果)时会发生这种情况。

答案 2 :(得分:2)

通常一个不熟悉C ++的人可能会编码

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

取代

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

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

答案 3 :(得分:1)

您正在尝试在代码中的某个位置使用无效值作为l值。 l值是可以赋值的表达式。

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

10 = x;

你应该在哪里:

x = 10;

虽然你的情况可能不是那么明显。

答案 4 :(得分:1)

例如

* int a = 10,b = 20;

int c = ++(a b + 1); 上面的代码将产生错误,因为在括号内您有一个表达式ont想要执行增量操作,而这是不可能的。因此,在执行此操作之前,您必须将该值存储到某个变量。因此上述代码将需要错误“ 左值”。

答案 5 :(得分:0)

尝试编译:

5 = 3;

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

答案 6 :(得分:0)

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

  

int a = 5; //这里5是Rvalue

L值是一个表达式,可以位于赋值的左侧或右侧。当它位于左侧时,它指的是一个可以保存值的位置。

  

表达式a中的a = 5为L.   值

当出现在右侧时,从L值读取值。 由于R值无法定位任何内存,因此无法保存任何值,如LValue所以

  

5 = 6或5 = a

将是编译器错误。

答案 7 :(得分:0)

我们为变量赋值。如果我们试图做相反的事情那么就会出现L值错误。

int x,y,z;
x=1;
y=2;
z=x+y; //Correct
x+y=z; //L-value required

答案 8 :(得分:0)

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

左值误差:

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

正确的:

if (n == 100) { code } // this resolved my issue

答案 9 :(得分:0)

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

#define MAX 10
void main(){
int num;
num  = ++MAX;
cout<<num;
}

答案 10 :(得分:0)

实际上,当您不输入“;”时,经常会发生此错误。而不是声明一个可能在出现此错误的变量之前的变量,不声明会引发此错误,因为它无法为未声明的变量赋值...聪明的孩子!