为什么将移动语义函数编写为采用r值引用?

时间:2017-08-21 21:07:29

标签: c++ move semantics rvalue-reference lvalue

我不明白为什么标准现在使用移动构造函数并移动带有r值参数的赋值运算符。我知道通常使用临时对象作为构造函数或赋值的参数是有用的,如:

Object obj1(1);
obj1 = Object(2);

而不是创建临时的,深度复制和销毁临时文件,它可以更有效地移动对象。但是,移动语义是否会像使用现有的l值一样普遍地进行?在这种情况下,整个“&&”当你使用l值时,双&符表示r值参考对我来说很困惑。

Object obj1(1), obj2(2);
obj1 = std::move(obj2);    // Use move assignment operator here, still using move semantics

在这种情况下使用移动赋值运算符时,它与任何r值无关,我是对的吗?只是我一直听到“&&”

中的双&符号
Object& operator=(Object&& other);

是一个r值参考,但在这个例子中它不是,对吧?在任何情况下,当您想要将现有对象移动到另一个对象时,不会涉及r值或r值引用,对吧?

0 个答案:

没有答案