>  기사  >  백엔드 개발  >  아무것도 움직이지 않으면 `std::move`를 `std::move`라고 부르는 이유는 무엇입니까?

아무것도 움직이지 않으면 `std::move`를 `std::move`라고 부르는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-20 04:40:02899검색

Why is `std::move` Called `std::move` if it Doesn't Move Anything?

std::move의 이름이 std::move인 ​​이유는 무엇입니까?

이름과 달리 std::move는 물리적으로 아무것도 이동하지 않습니다. 오히려 개체를 rvalue 참조, 더 구체적으로 xvalue로 캐스팅합니다. 함수 이름을 move로 결정한 것은 속이거나 혼동하기 위한 것이 아니라 코드를 더 읽기 쉽게 만들기 위한 것이었습니다.

rvalue 참조의 초기 단계에서는 std::swap 함수를 성능에 맞게 최적화해야 했습니다. 원래 방법에서는 명시적인 static_cast 코드의 기본 목적을 모호하게 만드는 표현식입니다.

std::move를 도입함으로써 명시적 캐스트는 코드의 의도(이동 의미론 활성화)를 강조하는 구문 설탕으로 대체되었습니다. "rvalue로 캐스팅"과 같은 정확한 기술적 세부 사항을 설명하면 추가 질문이 제기되어 요점이 모호해졌습니다.

std::move의 역사

std의 역사:: move는 2002년 rvalue 참조 제안으로 거슬러 올라갑니다. move 함수는 처음에 static_cast에 대한 구문 설탕으로 도입되었습니다. 당시 프로그래머들은 rvalue와 이동 의미 사이의 연관성을 완전히 이해했습니다.

C 언어가 발전하면서 rvalue의 개념은 오늘날 우리가 알고 있는 값 범주로 구체화되었습니다. 작업을 더 정확하게 설명하기 위해 Cast_to_xvalue와 같은 다른 이름을 사용하면 가독성이 저하될 수 있습니다.

std::move의 기능

기본적으로 std::move는 단순히 객체를 캐스팅합니다. x값으로. 이 캐스트는 사소하게 이동할 수 있는 객체에는 영향을 주지 않으며 이동 할당 연산자가 있는 객체의 경우 복사 할당 연산자 대신 이동 할당 연산자가 호출되도록 합니다.

생성된 객체 코드 측면에서 std:: move는 사소하게 움직일 수 있는 객체에는 영향을 미치지 않습니다. 이동 할당 연산자가 있는 객체의 경우 오버로드 해결이 변경될 수 있습니다. 그러나 런타임에는 std::move가 사실상 사라지며 컴파일 타임에만 영향을 미칩니다.

위 내용은 아무것도 움직이지 않으면 `std::move`를 `std::move`라고 부르는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.