C++ 什么是&;返回左值还是右值?

C++ 什么是&;返回左值还是右值?,c++,rvalue,lvalue,C++,Rvalue,Lvalue,根据教科书 运算符的地址(§2.3.2,第52页)需要左值操作数并返回 作为右值指向其操作数的指针 据我所知,如果我们能赋值,它就是左值。那么为什么教科书上说返回地址是右值。有人能用外行的语言给我解释一下吗。也就是说,不能将值分配给&a。 如果我们试图编译下面的代码,就会发生编译错误 int a = 6,c=9; int *x = &a; //Here x is a lvalue. &a = x; // Compilation error, as '&a' is an r

根据教科书

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


据我所知,如果我们能赋值,它就是左值。那么为什么教科书上说返回地址是右值。有人能用外行的语言给我解释一下吗。也就是说,不能将值分配给
&a
。 如果我们试图编译下面的代码,就会发生编译错误

int a = 6,c=9;
int *x = &a; //Here x is a lvalue.
&a = x; // Compilation error, as '&a' is an rvalue
据我所知,如果我们能

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

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

那么,您不能将以下内容分配给它:

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

正如你方报价中所说,它是右值。您不能为
&
的结果赋值(例如
&a=5;
是一个错误),它说
&a
是一个右值。@M.M是的!它应该是显示代码的哪一部分,你认为它分配了一些东西给
&a
,以支持你的说法,即它是左值?显示的代码没有将任何内容分配给
&a
,而是将
&a
分配给其他内容。这是一个很大的区别。@problematicsdude在
&a
中,
&code>是运算符,
a
是操作数。由于
a
是左值,因此可以使用运算符
&
,并返回分配给
x
的右值。然后,变量
x
可以分配另一个值(如
x=&c
),因为它是左值;不变性不是rvalue的核心属性(尽管内置类型的rvalue确实具有某种强制不变性,以帮助防止错误)
&a = &c; // ill formed because &a is rvalue
int *x = &a; // OK. Not an assignment
x = &c;  // OK because x is lvalue