如果将临时 Derived
传递给采用 Base&&
的方法,是否可以从中 move 构造 Base?
最佳答案
临时生命周期延长到函数结束(或参数的生命周期),所以你可以 move 构造一个Base
来自该引用的对象。
请注意,您需要一个额外的 std::move
使其成为 move 而不是拷贝:
Base b = std::move(param);
您从中移出的临时对象将保留为其类型的移出对象指定的任何状态。标准库类型,如 vector<int>
或 string
有一个所谓的“有效但未指定的状态” - 基本上你可以做的唯一明智的操作是分配(即复制或 move 到它)或销毁它。没有关于 Base
的信息' move 构造函数定义不能做进一步的假设。
关于c++ - 从 r 值引用 move 到临时的子对象是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636757/