右值引用失去其性质
Rvalue reference losing its nature
我不明白以下内容:
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
或等效项。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 启动类函数作为失去引用的线程
- 为什么对引用的常量引用会失去其恒定性?
- 右值引用失去其性质
- 当构造函数退出时,指针将失去引用
- 右值引用 — 我正在失去值