Eu simplesmente não entendi totalmente a lógica de std::move()
.
A princípio, pesquisei no Google, mas parece que só existem documentos sobre como usar std::move()
, não como funciona sua estrutura.
Quer dizer, eu sei o que a função de membro do modelo é, mas quando eu olho para a std::move()
definição no VS2010, ainda é confuso.
a definição de std :: move () segue abaixo.
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);
}
O que é estranho primeiro para mim é o parâmetro, (_Ty && _Arg), porque quando eu chamo a função como você vê abaixo,
// main()
Object obj1;
Object obj2 = std::move(obj1);
basicamente é igual a
// std::move()
_Ty&& _Arg = Obj1;
Mas como você já sabe, não é possível vincular diretamente um LValue a uma referência RValue, o que me faz pensar que deveria ser assim.
_Ty&& _Arg = (Object&&)obj1;
No entanto, isso é absurdo porque std :: move () deve funcionar para todos os valores.
Acho que, para entender totalmente como isso funciona, devo dar uma olhada nessas estruturas também.
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;
};
Infelizmente, ainda é tão confuso e eu não entendo.
Eu sei que tudo isso é devido à minha falta de habilidades básicas de sintaxe sobre C ++. Gostaria de saber como funcionam bem e quaisquer documentos que eu conseguir na internet serão mais do que bem-vindos. (Se você puder explicar isso, também será incrível).
move
funciona e não como é implementado. Acho esta explicação muito útil: pagefault.blog/2018/03/01/… .