右值引用失去其性质

Rvalue reference losing its nature

本文关键字:失去 引用      更新时间:2023-10-16

我不明白以下内容:

class Class {
  public:
  void operator=(string&&) {
      cout << "here";
  }
};
string func() {
    return "Paul";
}
int main()
{
    string&& rvalueref = func();
    Class obj;
    obj = rvalueref; <- error! Why isn't rvalueref a rvalue ref anymore?
    return 0;
}

由于我可以将 prvalue 绑定到右值引用,因此我认为我也可以传递它。为什么以上会失败?

我相信

std::move是你想要使用的。(定义见<utility>
这样,您可以将左值转换为右值。

//...
int main()
{
    string&& rvalueref = func();
    Class obj;
    obj = std::move(rvalueref);
    return 0;
}

如果您想阅读更多相关信息,可以在此处找到有关移动语义和右值引用的信息

"rvalue reference"中的"rvalue"指的是引用可以绑定到什么。 一旦绑定,它只是一个参考。 绑定右值引用和绑定右值引用之间没有区别。

命名变量是左值。("变量"是指对象或引用)。要生成 xvalue,即具有 rvalue 引用类型的表达式,您必须使用 std::move 或等效项。