Je viens de trouver moi-même pas de comprendre pleinement la logique de l' std::move()
.
Au premier abord, je l'ai googlé mais semble comme il y a seulement des documents sur la façon d'utiliser std::move()
, pas comment sa fonctionne la structure.
Je veux dire, je sais ce que le modèle de la fonction membre est mais quand je regarde en std::move()
définition dans VS2010, il est encore confuse.
la définition de std::move() va ci-dessous.
template<class _Ty> inline
typename tr1::_Remove_reference<_Ty>::_Type&&
move(_Ty&& _Arg)
{ // forward _Arg as movable
return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg);
}
Ce qui est bizarre première pour moi, c'est le paramètre, (_Ty&& _Arg), parce que quand j'ai appeler la fonction comme vous le voyez ci-dessous,
// main()
Object obj1;
Object obj2 = std::move(obj1);
essentiellement, il est égal à
// std::move()
_Ty&& _Arg = Obj1;
Mais comme vous le savez déjà, vous ne pouvez pas relier directement une LValue à une référence RValue, qui me fait penser qu'il devrait en être ainsi.
_Ty&& _Arg = (Object&&)obj1;
Cependant, ce qui est absurde, parce que std::move() pour toutes les valeurs.
Donc je suppose que pour bien comprendre comment cela fonctionne, je devrais prendre un coup d'oeil à ces structures trop.
template<class _Ty>
struct _Remove_reference
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&>
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&&>
{ // remove rvalue reference
typedef _Ty _Type;
};
Malheureusement, c'est toujours aussi confus et je ne l'obtenez pas.
Je sais que c'est à cause de mon manque de syntaxe de base des compétences sur le C++. Je voudrais savoir comment celles-ci fonctionnent à fond et tous les documents que je peux obtenir sur l'internet sera plus que bienvenue. (Si vous ne pouvez expliquer ça, ça va être génial aussi).