我应该在哪里为std :: move执行&&?

时间:2017-07-21 11:33:50

标签: c++11

例如,如果我有一个将向量移动到类成员的函数:

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。

1 个答案:

答案 0 :(得分:3)

  

我应该使用std :: move两次吗?我首先传递参数,第二次是将参数分配给成员?

由于表达式other_v是左值,因此需要进行一次移动。 由于exp v是左值,因此需要进行另一项操作。所有id表达式都是左值。