使用 C++ 时需要左值作为赋值错误的左操作数

Posted

技术标签:

【中文标题】使用 C++ 时需要左值作为赋值错误的左操作数【英文标题】:lvalue required as left operand of assignment error when using C++ 【发布时间】:2015-10-27 17:51:43 【问题描述】:
int main()


   int x[3]=4,5,6;
   int *p=x;
   p +1=p;/*compiler shows error saying 
            lvalue required as left 
             operand of assignment*/
   cout<<p 1;
   getch();

【问题讨论】:

您希望p + 1 = p 的结果是什么? 这不是 C 代码,而是 C++。更改标签和标题! p + 1p 都是内存中的单个地址,不能将一个地址分配给另一个地址 【参考方案1】:

当语句中有赋值运算符时,运算符的 LHS 必须是语言称为 lvalue 的东西。如果算子的 LHS 不计算为 lvalue,则无法将 RHS 中的值分配给 LHS。

你不能使用:

10 = 20;

因为10 不会评估为左值

你可以使用:

int i;
i = 20;

因为i 确实评估为左值

你不能使用:

int i;
i + 1 = 20;

因为i + 1 不会计算为左值

在您的情况下,p + 1 不会评估为 lavalue。因此,您不能使用

p + 1 = p;

【讨论】:

【参考方案2】:

要分配,您应该使用p=p+1; 而不是p+1=p;

int main()


   int x[3]=4,5,6;
   int *p=x;
   p=p+1; /*You just needed to switch the terms around*/
   cout<<p<<endl;
   getch();

【讨论】:

【参考方案3】:

简单地说,左值是可以出现在赋值左侧的东西,通常是变量或数组元素。

所以如果你定义int *p,那么p 就是一个左值。 p+1,这是一个有效的表达式,不是左值。

如果您尝试将 1 加到 p,正确的语法是:

p = p + 1;

【讨论】:

【参考方案4】:

如果你使用了赋值运算符,但使用方式或位置错误, 那么你会得到这种类型的错误!

假设你输入: p+1=p;你会得到错误的!

你会得到同样的错误: if(ch>='a' && ch='z') 如您所见,我尝试在 if() 语句中进行分配!!! 我有多傻!!!对吗?? 哈哈 实际上我忘了给小于( 如果(ch>='a' && ch并得到错误!

【讨论】:

【参考方案5】:

这只是一个错字(我猜)-

p+=1;

而不是p +1=p; 是必需的。

顾名思义,lvalue 表达式应该是赋值运算符的左操作数。

【讨论】:

以上是关于使用 C++ 时需要左值作为赋值错误的左操作数的主要内容,如果未能解决你的问题,请参考以下文章

错误:需要左值作为赋值的左操作数,我收到此错误啥是左值和右值以及如何删除此错误

条件运算符中的“错误:需要左值作为赋值的左操作数”

左值需要作为 c 中赋值错误的左操作数

左值需要作为赋值的左操作数

需要左值作为 ios 中赋值的左操作数

C ++ - 左值需要作为赋值的左操作数[重复]