Sadece mantığını tam olarak anlamadığımı fark ettim std::move()
.
İlk başta Google'da araştırdım, ancak std::move()
yapısının nasıl çalıştığı değil, nasıl kullanılacağına dair belgeler var gibi görünüyor .
Demek istediğim, şablon üye işlevinin ne olduğunu biliyorum ama std::move()
VS2010'daki tanıma baktığımda hala kafa karıştırıcı.
std :: move () tanımı aşağıdadır.
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);
}
İlk önce tuhaf olan şey, (_Ty && _Arg) parametresidir, çünkü aşağıda gördüğünüz gibi işlevi çağırdığımda,
// main()
Object obj1;
Object obj2 = std::move(obj1);
temelde eşittir
// std::move()
_Ty&& _Arg = Obj1;
Ama zaten bildiğiniz gibi, bir LValue'yu bir RValue referansına doğrudan bağlayamazsınız, bu da bana bunun böyle olması gerektiğini düşündürür.
_Ty&& _Arg = (Object&&)obj1;
Ancak, bu saçma çünkü std :: move () tüm değerler için çalışmalıdır.
Sanırım bunun nasıl çalıştığını tam olarak anlamak için bu yapılara da bir göz atmalıyı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;
};
Ne yazık ki hala kafa karıştırıcı ve anlamıyorum.
Tüm bunların, C ++ ile ilgili temel sözdizimi becerilerimin olmamasından kaynaklandığını biliyorum. Bunların nasıl tam olarak nasıl çalıştığını bilmek istiyorum ve internette alabileceğim tüm belgeler memnuniyetle karşılanacaktır. (Bunu sadece açıklayabilirsen, bu da harika olacak).