对于移动启用的类,这两者之间有区别吗?
struct Foo {
typedef std::vector<std::string> Vectype;
Vectype m_vec;
//this or
void bar(Vectype&& vec)
{
m_vec = std::move(vec);
}
//that
void bar(Vectype vec)
{
m_vec = std::move(vec);
}
};
int main()
{
Vectype myvec{"alpha","beta","gamma"};
Foo fool;
fool.bar(std::move(myvec));
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果你使用左值,myvec你还需要引入const
Vectype&版本,Foo::bar()因为Vectype&&不会绑定.除此之外,在rvalue情况下,Foo::bar(Vectype)将使用移动构造函数构造向量或更好地将副本全部放在一起,看到vec是一个右值(是吗?).那么有没有令人信服的理由不通过值声明而不是左值和右值超载?(考虑到我需要在任何情况下将向量复制到成员变量.)