의 논리를 완전히 이해하지 못하고 std::move()
있습니다.
처음에는 검색했지만 std::move()
구조가 어떻게 작동하는지가 아니라 사용 방법에 대한 문서 만있는 것 같습니다 .
내 말은, 템플릿 멤버 함수가 무엇인지 알고 있지만 std::move()
VS2010에서 정의를 살펴보면 여전히 혼란 스럽습니다.
std :: move ()의 정의는 다음과 같습니다.
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);
}
저에게 가장 이상한 것은 (_Ty && _Arg) 매개 변수입니다. 왜냐하면 아래와 같이 함수를 호출하면
// main()
Object obj1;
Object obj2 = std::move(obj1);
기본적으로 다음과 같습니다.
// std::move()
_Ty&& _Arg = Obj1;
그러나 이미 알고 있듯이 LValue를 RValue 참조에 직접 연결할 수는 없기 때문에 이와 같아야한다고 생각합니다.
_Ty&& _Arg = (Object&&)obj1;
그러나 std :: move ()가 모든 값에 대해 작동해야하기 때문에 이것은 어리석은 일입니다.
그래서 이것이 어떻게 작동하는지 완전히 이해하고 있다고 생각합니다.이 구조체도 살펴 봐야합니다.
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;
};
불행히도 여전히 혼란스럽고 이해하지 못합니다.
이것이 C ++에 대한 기본적인 구문 기술이 부족하기 때문이라는 것을 알고 있습니다. 이러한 작업이 어떻게 철저하게 작동하는지, 인터넷에서 얻을 수있는 모든 문서를 환영하는 것 이상으로 알고 싶습니다. (당신이 이것을 설명 할 수 있다면 그것도 굉장 할 것입니다).
move
구현 방식보다는 작동 방식 을 이해하기 위해 여기에 온 것 같습니다 . 이 설명이 정말 유용하다고 생각합니다 : pagefault.blog/2018/03/01/… .