【发布时间】:2019-06-30 18:24:30
【问题描述】:
让我们考虑以下代码:
class X {
std::vector<int> _v;
public:
X(std::vector<int>&& v): _v(std::move(v)) {}
};
编译器仅对可移动的对象调用此构造函数。那么为什么不直接将右值引用定义为右值表达式,而不是每次都为它们编写 std::move 呢?
ctor 成员初始化列表如下所示:
_v(v)
但这仍然是一个动作,而不是副本。
【问题讨论】:
-
那我们就不能移动左值了。
-
如果你出于某种原因想要复制它,你需要像 std::copy 这样的东西吗?
-
你能举个例子吗?
-
@n.m.不,没有 std::move 代码会复制
标签: c++ c++11 move-semantics rvalue-reference