临时对象中的成员变量是否可以隐式移动?

gok*_*urk 6 c++ rvalue move-semantics c++11

在我的课程中,我使用std::vectoretc作为成员变量,它们带有自己的移动构造函数.我没有为我的类显式声明移动构造函数,并且它们大部分都没有隐式声明.

如果使用rvalue调用隐式复制构造函数或我的类的隐式赋值运算符,是否复制或移动了移动构造函数的成员?

如果它们被移动了,在使用具有移动构造成员的类时,是否有任何理由试图避免临时性?

Mar*_*k B 0

无论是隐式创建还是显式声明,您的复制构造函数都只有一个签名,因此编译器无法根据该构造函数的右侧操作数生成不同的代码。它必须在所有情况下复制可移动属性,因为复制构造函数只有一组必须适用于所有可能输入的代码。

我认为你的最后一个问题可能与性能有关,但我不能确定。我建议你编写最明显的代码并让优化器对其进行破解。然后分析结果并查看是否表明临时创建和销毁给您带来了问题,只有在确实存在问题的情况下,您才应该考虑替代机制。