Mi sono appena ritrovato a non comprendere appieno la logica di std::move()
.
All'inizio l'ho cercato su Google ma sembra che ci siano solo documenti su come usarlo std::move()
, non su come funziona la sua struttura.
Voglio dire, so qual è la funzione del membro del modello, ma quando std::move()
esamino la definizione in VS2010, è ancora fonte di confusione.
la definizione di std :: move () va di seguito.
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);
}
La prima cosa strana per me è il parametro, (_Ty && _Arg), perché quando chiamo la funzione come vedi sotto,
// main()
Object obj1;
Object obj2 = std::move(obj1);
fondamentalmente è uguale a
// std::move()
_Ty&& _Arg = Obj1;
Ma come già sai, non puoi collegare direttamente un LValue a un riferimento RValue, il che mi fa pensare che dovrebbe essere così.
_Ty&& _Arg = (Object&&)obj1;
Tuttavia, questo è assurdo perché std :: move () deve funzionare per tutti i valori.
Quindi immagino che per capire appieno come funziona, dovrei dare un'occhiata anche a queste strutture.
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;
};
Purtroppo è ancora così confuso e non lo capisco.
So che è tutto a causa della mia mancanza di competenze sintattiche di base su C ++. Mi piacerebbe sapere come funzionano a fondo e qualsiasi documento che posso ottenere su Internet sarà più che benvenuto. (Se puoi spiegarlo, anche quello sarà fantastico).
move
funziona piuttosto che come è implementato. Trovo questa spiegazione davvero utile: pagefault.blog/2018/03/01/… .