例如,如果我有一个将向量移动到类成员的函数:
struct A
{
void f(std::vector<int> && v)
{
m_v = std::move(v); //1
}
std::vector<int> m_v;
}
void other_func()
{
std::vector<int> other_v;
A a;
a.f(std::move(other_v)); //2
}
我应该使用std :: move两次吗?我首先传递参数,第二次将参数分配给成员时?至少代码编译没有第一个std :: move。
答案 0 :(得分:3)
我应该使用std :: move两次吗?我首先传递参数,第二次是将参数分配给成员?
是
由于表达式other_v
是左值,因此需要进行一次移动。
由于exp v
是左值,因此需要进行另一项操作。所有id表达式都是左值。