什么会返回左值或右值?

时间:2019-10-21 03:42:36

标签: c++ rvalue lvalue

根据教科书。

  

运算符的地址(第2.3.2节,第52页)需要一个左值操作数并返回   指向其操作数作为右值的指针。

int a = 6,c=9;
int *x = &a; //Here x is a lvalue.
x = &c;

据我所知,如果我们可以赋值,那就是左值。那为什么教科书会说返回右值的地址。有人可以用外行人的语言解释一下吗

2 个答案:

答案 0 :(得分:1)

课本上说&a是右值。即值不能分配给&a。 如果我们尝试编译以下代码,则会发生编译错误。

int a = 6,c=9;
int *x = &a; //Here x is a lvalue.
&a = x; // Compilation error, as '&a' is an rvalue

答案 1 :(得分:1)

  

据我所知我们可以分配

对于类类型,这不一定是正确的。但是它始终适用于示例中使用的指针。

  

那为什么教科书说返回右值的地址

好吧,您不能分配给它:

&a = &c; // ill formed because &a is rvalue
int *x = &a; // OK. Not an assignment
x = &c;  // OK because x is lvalue