我们什么时候得到“需要左值”错误...在编译 C++ 程序时???(我正在使用 VC++)
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++ 是一门有很多细节的语言;如果你想获得正式的,你应该咨询正式的参考。
当您尝试分配您无法分配的东西(例如标量函数的结果)时,就会发生这种情况。
通常,不习惯 C++ 的人可能会编写代码
if ((x+1)=72) ...
代替
if ((x+1)==72) ...
第一种意味着将 72 分配给 x+1(显然无效),而不是测试 72 和 (x+1) 之间的相等性
您试图在代码中的某处使用无效值作为左值。l 值是一个可以赋值的表达式。
例如,您可能有如下语句:
10 = x;
你应该有的地方:
x = 10;
尽管在您的情况下可能并不那么明显。
举个例子
*int a=10,b=20;
诠释 c=++(a b+1); 上面的代码会出错,因为在括号内你有一个表达式 ont 你想要做增量操作,这是不可能的。因此,在这样做之前,您必须将该值存储到某个变量中。所以上面的代码将需要“左值”错误。
我们给一个变量赋值。如果我们尝试做相反的事情,则会发生 L 值错误。
int x,y,z;
x=1;
y=2;
z=x+y; //Correct
x+y=z; //L-value required
R Value 是始终出现在赋值运算符右侧的表达式 例如:
int a = 5;//这里5是R值
L Value 是一个表达式,可以出现在赋值的左侧或右侧。当它在左侧时,它指的是可以容纳值的地方。
这里
a
的表达式a = 5
是 L 值
当出现在右侧时,从 L 值中读取值。由于 R 值无法定位任何内存,因此它不能像 LValue 那样保存任何值,所以
5 = 6 或 5 = 一个
将是编译器错误。
尝试编译:
5 = 3;
你得到error: lvalue required as left operand of assignment
我有一个类似的问题,我发现问题是我在 if 语句中使用了单个 '=' 而不是双 '=='
左值错误:
if (n = 100) { code } // this is incorrect and comes back with the lvalue error
正确的:
if (n == 100) { code } // this resolved my issue
实际上,当你不放“;”时,这个错误经常发生。并且不声明可能在给出此错误的变量之前的变量,不声明会引发此错误,因为它无法为未声明的变量赋值......聪明的孩子!
当您尝试操纵常量的值时会发生这种情况,它可能是不允许的增量或减量。`
#define MAX 10
void main(){
int num;
num = ++MAX;
cout<<num;
}