我们什么时候得到“需要l值”错误...编译C ++程序时???(我正在使用VC ++)
答案 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)
实际上,当您不输入“;”时,经常会发生此错误。而不是声明一个可能在出现此错误的变量之前的变量,不声明会引发此错误,因为它无法为未声明的变量赋值...聪明的孩子!