可以从r值引用移动到临时的子对象吗

Is it OK to move from r-value reference to sub-object of temporary?

本文关键字:对象 移动 引用      更新时间:2023-10-16

如果将临时Derived传递给接受Base&&的方法,是否可以从中移动构造Base?

临时生命周期会延长到函数结束(或参数的生命周期),因此您可以从该引用中移动构造Base对象。

请注意,您需要一个额外的std::move才能使其移动而不是复制:

Base b = std::move(param);

从中移动的临时对象将处于为其类型的移动对象指定的任何状态。像vector<int>string这样的标准库类型有一个所谓的"有效但未指定的状态"——基本上,你能做的唯一合理的操作就是赋值(即复制或移动到其中)或销毁它。如果没有关于Base移动构造函数定义的信息,就无法做出进一步的假设。