std::move는 어떻게 표현식을 Rvalue로 변환합니까?
std::move()는 표현식을 rvalue로 쉽게 변환합니다(오른쪽). 값 참조) 이동 의미를 활성화합니다. 그러나 MSVC 표준 라이브러리의 구현은 복잡할 수 있습니다.
구현은 다음과 같습니다.
1 2 3 4 5 6 |
|
이것이 어떻게 작동하는지 살펴보겠습니다.
1 2 |
|
std::move()를 호출하면 _Arg 참조 매개변수가 lvalue obj1에 바인딩됩니다. 그러나 rvalue 참조를 lvalue에 직접 바인딩하는 것은 허용되지 않으므로 (Object&&)와 같은 rvalue 참조에 대한 캐스트가 필요할 것으로 예상할 수 있습니다.
std:: 구현에 대해 더 자세히 알아보세요. Remove_reference는 문제를 명확히 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
이 구현에서는 Remove_reference가 T&를 T로, T&&를 T로, T&&&로 변환한다는 것을 보여줍니다. 따라서 obj1이 Object 유형의 lvalue인 경우 결과 함수는 다음과 같습니다.
1 2 3 4 |
|
더 자세히 설명하면:
1 2 3 4 |
|
명명된 rvalue 참조는 lvalue로 처리되고 lvalue에서 rvalue 참조로의 암시적 변환은 허용되지 않으므로 Object&&로의 형변환이 필요합니다.
1 2 3 4 |
|
여기서 C 11의 참조 축소 규칙이 적용되어 Object& && 표현식이 lvalue 참조인 Object&로 해석될 수 있으며 이는 실제로 lvalue에 바인딩될 수 있습니다. 따라서 최종 함수는 인수를 rvalue 참조로 변환하고 반환합니다.
결론적으로 std::move()는 std::remove_reference를 활용하여 lvalue와 rvalue를 모두 rvalue로 변환하여 이동을 용이하게 합니다. C의 의미.
위 내용은 `std::move()`는 어떻게 C에서 lvalue를 rvalue로 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!