이름과 달리 std::move는 물리적으로 아무것도 이동하지 않습니다. 오히려 개체를 rvalue 참조, 더 구체적으로 xvalue로 캐스팅합니다. 함수 이름을 move로 결정한 것은 속이거나 혼동하기 위한 것이 아니라 코드를 더 읽기 쉽게 만들기 위한 것이었습니다.
rvalue 참조의 초기 단계에서는 std::swap 함수를 성능에 맞게 최적화해야 했습니다. 원래 방법에서는 명시적인 static_cast
std::move를 도입함으로써 명시적 캐스트는 코드의 의도(이동 의미론 활성화)를 강조하는 구문 설탕으로 대체되었습니다. "rvalue로 캐스팅"과 같은 정확한 기술적 세부 사항을 설명하면 추가 질문이 제기되어 요점이 모호해졌습니다.
std의 역사:: move는 2002년 rvalue 참조 제안으로 거슬러 올라갑니다. move 함수는 처음에 static_cast
C 언어가 발전하면서 rvalue의 개념은 오늘날 우리가 알고 있는 값 범주로 구체화되었습니다. 작업을 더 정확하게 설명하기 위해 Cast_to_xvalue와 같은 다른 이름을 사용하면 가독성이 저하될 수 있습니다.
기본적으로 std::move는 단순히 객체를 캐스팅합니다. x값으로. 이 캐스트는 사소하게 이동할 수 있는 객체에는 영향을 주지 않으며 이동 할당 연산자가 있는 객체의 경우 복사 할당 연산자 대신 이동 할당 연산자가 호출되도록 합니다.
생성된 객체 코드 측면에서 std:: move는 사소하게 움직일 수 있는 객체에는 영향을 미치지 않습니다. 이동 할당 연산자가 있는 객체의 경우 오버로드 해결이 변경될 수 있습니다. 그러나 런타임에는 std::move가 사실상 사라지며 컴파일 타임에만 영향을 미칩니다.
위 내용은 아무것도 움직이지 않으면 `std::move`를 `std::move`라고 부르는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!