Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“所需的l值”;错误 当我们编译C++程序时,什么时候得到“L值需要”的错误??(我使用VC++)< P>这是在试图分配给不能分配的东西(比如标量函数的结果)时发生的。 < p>你试图在代码中某个地方使用一个无效值来计算L值。l值是可以为其赋值的表达式_C++_Lvalue_Rvalue - Fatal编程技术网

&引用;“所需的l值”;错误 当我们编译C++程序时,什么时候得到“L值需要”的错误??(我使用VC++)< P>这是在试图分配给不能分配的东西(比如标量函数的结果)时发生的。 < p>你试图在代码中某个地方使用一个无效值来计算L值。l值是可以为其赋值的表达式

&引用;“所需的l值”;错误 当我们编译C++程序时,什么时候得到“L值需要”的错误??(我使用VC++)< P>这是在试图分配给不能分配的东西(比如标量函数的结果)时发生的。 < p>你试图在代码中某个地方使用一个无效值来计算L值。l值是可以为其赋值的表达式,c++,lvalue,rvalue,C++,Lvalue,Rvalue,例如,您可能有如下语句: 10 = x; 你应该有: x = 10; 尽管在您的案例中可能不是很明显。尝试编译: 5 = 3; 然后得到错误:赋值的左操作数需要左值一个“左值”是一个可以作为赋值目标的值。“l”代表“左”,如等号的左侧。右值是右边的值并生成一个值,不能直接指定给。如果您得到的是“需要左值”,则有一个表达式,当需要左值时,该表达式会生成右值 例如,常数是右值而不是左值。因此: 1 = 2; // Not well formed, assigning to an rvalue

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

10 = x;
你应该有:

x = 10;
尽管在您的案例中可能不是很明显。

尝试编译:

5 = 3;
然后得到
错误:赋值的左操作数需要左值

一个“左值”是一个可以作为赋值目标的值。“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;
是的。请注意,您可以从函数返回左值;例如,可以返回对提供运算符=()的对象的引用


正如Pavel Minaev在评论中指出的那样,这不是语言中左值和右值的正式定义,而是试图向那些对在需要左值的地方使用右值的错误感到困惑的人进行描述。C++是一种有很多细节的语言;如果你想正式化,你应该查阅正式的参考文献。

< P>典型的不习惯C++的人可能会对

进行编码。
if ((x+1)=72) ...
代替

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

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

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

INTA=5//这里5是右值

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

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

当出现在右侧时,从L值读取值。 因为R值不能定位任何内存,所以它不能像左值那样保存任何值

5=6或5=a


将是编译器错误。

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

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

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

左值错误:

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

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

*INTA=10,b=20

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

当您尝试操作常量的值时,可能会出现不允许的增量或减量。 `

#定义最大值10
void main(){
int-num;
num=++MAX;

cout事实上,当你不放一个“;”时,这个错误经常发生不要声明一个可能在给出此错误的变量之前的变量,不要声明会引发此错误,因为它无法为未声明的变量赋值…smart boy!

请发布一段代码片段。您肯定应该至少用一条复制粘贴的生成错误消息来扩展此问题,因为人们经常直接输入到搜索引擎。不一定是“内存位置”,真的。@strager:左值指的是一个对象。对象是一个存储区域。“l”也代表“定位器”作为l值定义存储位置定位器值。此定义并不完全正确。例如,返回
std::string
实例的函数将返回一个临时值,它是一个右值;但是,该右值具有
运算符=
,因此可以显示在
=
的左侧-但是,作为右值,它将为not绑定到一个非常量引用。另一方面,
const std::string
变量是一个左值,即使您不能分配给它(因为它是常量变量)。我打算写“是”,然后我做了一个快速测试并考虑了它。您可以有一个方法“T const&operator=(T const&)const”,所以constness是不相关的,在赋值表达式中有一个constlhs。不要求运算符=()对目标对象进行变异。当然,我们现在已经输入了“语言律师”在60秒钟内我写的答案并没有涵盖C++的所有细微差别。但是,作为LValy概念的简单描述,我认为它可以成立。我认为LLVIEW是“定位器值”不是语言立法。指的是记忆,但这只是说实话。给新手写答案很容易。但我认为给新手写正确的答案很难。我删除了我的答案,因为我发现这可能对他没有帮助(尽管我不知道其中有什么错误——除了说左值是指存储,没有解释为什么函数可以是左值)。但我认为在谈论赋值时,你仍然应该说“可修改的左值”,而不仅仅是“左值”。
#define MAX 10
void main(){
int num;
num  = ++MAX;
cout<<num;
}