Tôi chỉ thấy mình không hiểu đầy đủ logic của std::move()
.
Lúc đầu, tôi truy cập vào nó nhưng có vẻ như chỉ có tài liệu về cách sử dụng std::move()
chứ không phải cách hoạt động của cấu trúc.
Ý tôi là, tôi biết hàm thành viên mẫu là gì nhưng khi tôi nhìn vào std::move()
định nghĩa trong VS2010, nó vẫn còn khó hiểu.
định nghĩa của std :: move () ở bên dưới.
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);
}
Điều kỳ lạ đối với tôi đầu tiên là tham số, (_Ty && _Arg), bởi vì khi tôi gọi hàm như bạn thấy bên dưới,
// main()
Object obj1;
Object obj2 = std::move(obj1);
về cơ bản nó tương đương với
// std::move()
_Ty&& _Arg = Obj1;
Nhưng như bạn đã biết, bạn không thể liên kết trực tiếp LValue với tham chiếu RValue, điều này khiến tôi nghĩ rằng nó phải như thế này.
_Ty&& _Arg = (Object&&)obj1;
Tuy nhiên, điều này là vô lý vì std :: move () phải hoạt động với tất cả các giá trị.
Vì vậy, tôi đoán để hiểu đầy đủ cách hoạt động của nó, tôi cũng nên xem các cấu trúc này.
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;
};
Thật không may, nó vẫn khó hiểu và tôi không hiểu.
Tôi biết rằng tất cả là do tôi thiếu kỹ năng cú pháp cơ bản về C ++. Tôi muốn biết cách thức hoạt động của những thứ này và bất kỳ tài liệu nào tôi có thể lấy trên internet sẽ được hoan nghênh hơn cả. (Nếu bạn có thể giải thích điều này, điều đó cũng sẽ tuyệt vời).
move
hoạt động hơn là cách nó được triển khai. Tôi thấy lời giải thích này thực sự hữu ích: pagefault.blog/2018/03/01/… .