在我的课本中,vector push_back move 实现的实现是:
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
将被复制而不是 move 到它的目的地。更多信息可以在 Rvalue References Explained 中找到.
关于c++ - vector push_back move 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33205686/