为什么要调用std :: move来传递给构造函数?

时间:2013-10-30 04:07:19

标签: c++11 move-semantics

//move the element
void StrVec::push_back(string &&s)
{
    chk_n_alloc();
    alloc.constructor(first_free++,std::move(s));
}

alloc是allocator的一个对象。 不关心chk_n_alloc()。 我只想知道 s 已经是一个右值,为什么要调用std :: move将 s 传递给构造函数? 代码来自C ++ primer 5th p545。

1 个答案:

答案 0 :(得分:2)

这是一个棘手的情况,s作为右值引用传递,但是当你给它一个名字时,它是一个左值,所以你必须移动它,你可能知道它只是一个强制转换为右值参考。这仍然意味着必须将参数作为右值参考,因为这可以防止非临时值传递给它(除非它们被移动)