"需要l值"错误

JAY*_*Y G 1 c++ rvalue lvalue

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

jan*_*anm 11

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

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

1 = 2;  // Not well formed, assigning to an rvalue
int i; (i + 1) = 2;  // Not well formed, assigning to an rvalue.
Run Code Online (Sandbox Code Playgroud)

不起作用,但是:

int i;
i = 2;
Run Code Online (Sandbox Code Playgroud)

请问.请注意,您可以从函数返回左值; 例如,您可以返回对提供operator =()的对象的引用.

正如Pavel Minaev在评论中指出的那样,这并不是语言中左值和右值的正式定义,而是试图向某人描述一个关于使用需要左值的右值的错误.C++是一种具有许多细节的语言; 如果你想要正式,你应该咨询正式的参考.

  • 这个定义并不完全正确.例如,返回`std :: string`实例的函数将返回一个临时值,即一个rvalue; 但是,rvalue有`operator =`,因此可以出现在`=`的左侧 - 但是,作为一个rvalue,它不会绑定到非const引用.另一方面,`const std :: string`变量是一个左值,即使你不能赋值给它(因为它是一个常量). (3认同)
  • “l”也代表“定位器”,因为 l 值定义了存储位置定位器值。 (2认同)