C++ 是Widget&&;rhs是左值还是右值引用
在有效的现代C++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之间有什么区别?类型:在这两种
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之间有什么区别?类型:在这两种情况下,参数的类型都是“对小部件的右值引用” 值类别:在这两种情况下,参数的名称都是左值表达式 没有区别
- 进一步阅读:
std::move()
,否则将被解释为左值引用。@Ladence这不准确,虽然dup的结果是正确的:问题不一样,但接受的答案提供了这个问题的答案:没有区别。如果你是一个类型,你的sizeof
return@SombreroChickensizeof(你妈妈)
明白了,它们是Widget的右值引用。它们可以分配给,因此它们也是lvalue@fizzbuzz我听说有几次“可以分配给,所以它们也是左值的”,但这并不十分准确。这些是左值,因为它们是左值。它们是指一个对象的名称,这几乎总是一个左值,因为语言规则这么说。R值通常没有名称,例如std::move()
的结果。左值/右值与表达式的类型相关,而不是与对象的类型相关。