3

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));

副作用のない

4

1 に答える 1

4

はい、参照修飾子のないタイプのT場合、両方std::forward<T>std::forward<T&&>は単なる空想的な言い方std::moveです。

于 2012-05-30T10:03:47.990 に答える