//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。
答案 0 :(得分:2)
这是一个棘手的情况,s
作为右值引用传递,但是当你给它一个名字时,它是一个左值,所以你必须移动它,你可能知道它只是一个强制转换为右值参考。这仍然意味着必须将参数作为右值参考,因为这可以防止非临时值传递给它(除非它们被移动)