我不明白为什么标准现在使用移动构造函数并移动带有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值引用,对吧?