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

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

4

1 回答 1

2

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

于 2013-10-30T05:16:58.367 回答