在MSVC2010下,vector
类的移动构造函数的定义如下:
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));
没有副作用
答案 0 :(得分:4)
是的,对于没有引用限定符T
的类型,std::forward<T>
和std::forward<T&&>
只是说std::move
的奇特方式。