【问题标题】:Is Widget&& rhs an lvalue or an rvalue reference [duplicate]Widget&& rhs 是左值还是右值引用[重复]
【发布时间】:2020-01-15 11:58:03
【问题描述】:

在有效的现代 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:问题不一样但接受的答案提供了这个问题的答案:没有区别。

标签: c++ c++11 reference rvalue lvalue


【解决方案1】:

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

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

没有区别。

【讨论】:

  • 如果你是一个类型,你的sizeof 会返回什么
  • @SombreroChicken sizeof(your mum)
  • 知道了,它们是对 Widget 的右值引用。它们可以被赋值,所以它们也是左值
  • @fizzbuzz 我听说过几次“可以分配给,所以它们也是左值”,而且不太准确。这些是左值,因为它们是左值。它们是引用对象的名称,并且几乎总是一个左值,因为语言规则是这样说的。右值通常没有名称,例如std::move() 的结果。左值/右值与你拥有的 表达式 类型有关,而不是你拥有的对象类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多