我不明白以下内容:
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
或等效项。