Vector push_back 移动实现

Vector push_back move implementation

在我的课本中,向量push_back移动实现的实现是:

void push_back( Object && x )
{
    if( theSize == theCapacity )
        reserve( 2 * theCapacity + 1 );
    objects[ theSize++ ] = std::move( x );
}

我对 std::move 的理解是,它基本上将项目静态转换为右值引用。那么,当 x 已经作为右值引用传入时,为什么在最后一行他们必须使用 std::move( x )?

x 是一个右值引用,但您必须遵循的经验法则是:如果它有名称,则它是一个 左值。因此,您必须应用 std::move 将其类型转换为右值。如果你遗漏了 std::move 那么 x 将被复制而不是移动到它的目的地。可以在 Rvalue References Explained.

中找到更多信息