Me encontré sin comprender completamente la lógica de std::move() .
Al principio, lo busqué en Google, pero parece que solo hay documentos sobre cómo usar std::move() , no cómo funciona su estructura.
Quiero decir, sé cuál es la función del miembro de la plantilla, pero cuando miro std::move() definición en VS2010, todavía es confuso.
la definición de std :: move () va más abajo.
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);
}
Lo que es extraño primero para mí es el parámetro, (_Ty && _Arg), porque cuando llamo a la función como ves a continuación,
// main()
Object obj1;
Object obj2 = std::move(obj1);
Básicamente equivale a
// std::move()
_Ty&& _Arg = Obj1;
Pero como ya sabes, no puedes vincular directamente un LValue a una referencia de RValue, lo que me hace pensar que debería ser así.
_Ty&& _Arg = (Object&&)obj1;
Sin embargo, esto es absurdo porque std :: move () debe funcionar para todos los valores.
Así que supongo que para entender completamente cómo funciona esto, debería echar un vistazo a estas estructuras también.
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;
};
Desafortunadamente, sigue siendo tan confuso y no lo entiendo.
Sé que todo esto se debe a mi falta de conocimientos básicos de sintaxis sobre C ++. Me gustaría saber cómo funcionan a fondo y cualquier documento que pueda obtener en Internet será más que bienvenido. (Si puedes explicar esto, también será genial).
movefunciona en lugar de cómo se implementa. Encuentro esta explicación realmente útil: pagefault.blog/2018/03/01/… .