C++ 是Widget&&;rhs是左值还是右值引用

C++ 是Widget&&;rhs是左值还是右值引用,c++,c++11,reference,rvalue,lvalue,C++,C++11,Reference,Rvalue,Lvalue,在有效的现代C++ class Widget { public: Widget(Widget&& rhs); // rhs is an lvalue, though it has … // an rvalue reference type }; rhs是左值 void f(Widget&& param); // rvalue reference param是一个右值引用 rhs和param之间有什么区别?类型:在这两种

在有效的现代C++

class Widget {
public:
 Widget(Widget&& rhs); // rhs is an lvalue, though it has
 …                    // an rvalue reference type
};
rhs是左值

void f(Widget&& param); // rvalue reference
param是一个右值引用


rhs和param之间有什么区别?

类型:在这两种情况下,参数的类型都是“对小部件的右值引用”

值类别:在这两种情况下,参数的名称都是左值表达式

没有区别

  • 进一步阅读:

rhs是构造函数内部的一个右值。这意味着如果要使用rhs作为右值引用,则应在函数内部使用
std::move()
,否则将被解释为左值引用。@Ladence这不准确,虽然dup的结果是正确的:问题不一样,但接受的答案提供了这个问题的答案:没有区别。如果你是一个类型,你的
sizeof
return@SombreroChicken
sizeof(你妈妈)
明白了,它们是Widget的右值引用。它们可以分配给,因此它们也是lvalue@fizzbuzz我听说有几次“可以分配给,所以它们也是左值的”,但这并不十分准确。这些是左值,因为它们是左值。它们是指一个对象的名称,这几乎总是一个左值,因为语言规则这么说。R值通常没有名称,例如
std::move()
的结果。左值/右值与表达式的类型相关,而不是与对象的类型相关。