小编hur*_*ter的帖子

通过值或rvalue-ref传递

对于移动启用的类,这两者之间有区别吗?

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是一个右值(是吗?).那么有没有令人信服的理由不通过值声明而不是左值和右值超载?(考虑到我需要在任何情况下将向量复制到成员变量.)

c++ rvalue-reference c++11

10
推荐指数
2
解决办法
2388
查看次数

标签 统计

c++ ×1

c++11 ×1

rvalue-reference ×1