所以我已经被这个烧伤过好几次了。这有什么区别:
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/