c++ - 当您移动到非右值引用时会发生什么?

标签 c++ c++11

所以我已经被这个烧伤过好几次了。这有什么区别:

 Movable&& object = std::move(another_movable);

还有这个:

 Movable object = std::move(another_movable);

看起来两者应该同样有效,但我总是在第二个示例中遇到莫名其妙的行为(对象的属性发生变化)。这是为什么?

最佳答案

也许将其与左值引用版本进行比较可能会有所帮助:

Object& object = another_object;

Object object  = another_object;

第一个是对左值的引用,因此没有调用构造函数。它只是引用 名为another_object 的对象,就像一个指针。 Object object 创建一个全新的对象,因此将调用构造函数(不假设复制省略)。

现在右值引用是一样的,但它们是专门为右值量身定做的。它们现在引用 初始化它的右值。

关于c++ - 当您移动到非右值引用时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550855/

相关文章:

c++ - 使用继承的 luabind 和 std::shared_ptr

c++ - 无法使用 cstdio 在 C++ 中使用双变量

c++ - 任何可在 facebook 上分享/发送邮件的 cocos2d-X 功能?

c++ - 写入大文件

c++ - 增加两点之间的几何角度

c++ - 从 ‘std::wstring {aka std::basic_string<wchar_t>}’ 到非标量类型 ‘UString {aka std::basic_string<char>}’ 的转换

c++ - 模板类型定义的新 "using"语法解决了什么问题?

c++ - 如何将删除器传递给 make_shared?

c++ - Win32 - 确定路径是否有可用的巨型图标

c++ - std::function<> 和标准函数指针之间的区别?