在 MSVC2010 下,vector
类的 move 构造函数定义如下:
vector(_Myt&& _Right)
: _Mybase(_Right._Alval)
{ // construct by moving _Right
_Assign_rv(_STD forward<_Myt>(_Right));
}
因为还有一个复制构造函数的定义,我想我们永远不会调用 vector(_Myt&& _Right)
并将左值引用作为参数。
所以我想知道是否在这里,这一行:
_Assign_rv(_STD forward<_Myt>(_Right));
可以替换为:
_Assign_rv(_STD move<_Myt>(_Right));
没有副作用
最佳答案
是的,对于没有引用限定符的类型 T
, 两者 std::forward<T>
和 std::forward<T&&>
只是花哨的说法std::move
.
关于C++ vector 实现 - move 构造函数 - move 与前进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814042/