小编And*_*sen的帖子

理解std :: move()的代码

我真的想了解std :: move()函数的内在细节.

std :: move()的代码如下所示:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html#Move_Semantics.

template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
    return a;
}
Run Code Online (Sandbox Code Playgroud)

为什么此代码返回右值引用?该参数是类型T右值参考.是否a计算rvalue引用指向的对象,以便将rvalue引用返回给对象?另外,为什么remove_reference<T>需要这部分?

该教程还写道

此move()为其目标提供其参数的值,但没有义务保留其源的值.因此,对于向量,可以合理地期望move()将其参数保留为零容量向量,以避免必须复制所有元素.换句话说,移动是一种潜在的破坏性读取.

但话说回来

移动功能确实做得很少.所有move都接受lvalue或rvalue参数,并将其作为右值返回,而不触发复制构造.

如果这被理解为,std :: move()可以先"清空"对象(在本例中为std :: vector),然后将对象作为右值返回(根据C++规范)?但是,官方的std :: move()完全按照后面引用的规定进行了吗?

为什么当它返回一个右值引用时,它说std :: move()返回一个rvalue?

c++ stl vector c++11

3
推荐指数
1
解决办法
1506
查看次数

标签 统计

c++ ×1

c++11 ×1

stl ×1

vector ×1