我有这段代码:
SomeType::SomeType(std::vector<Item>&& container, const float someOtherPArameter)
: internal_container(std::move(container))
{
// some code here
}
有人可以向我解释为什么移动构造函数在没有'std :: move'的情况下不会调用'internal_container'吗?
答案 0 :(得分:2)
由于
SomeType::SomeType(std::vector<Item>&& container, const float someOtherPArameter)
: internal_container(container)
{
// the parameter container is in scope here
}
如果在构造函数体内访问参数container
找到一个移动的对象,那将是非常令人惊讶的。 (它也会破坏在C ++ 03中完全有效的代码)
这就是你必须明确启用移动的原因。
答案 1 :(得分:2)
只要从相同类型的xvalue初始化对象,就会调用移动构造函数。您可以通过调用xvalue
来创建std::move(x)
。将参数声明为右值参考不会自动使其成为xvalue
。