> 백엔드 개발 > C++ > 실제로 아무것도 움직이지 않는데 `std::move`를 `std::move`라고 부르는 이유는 무엇입니까?

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

Susan Sarandon
풀어 주다: 2024-11-15 18:01:03
원래의
646명이 탐색했습니다.

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

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

std::move 함수는 이름에도 불구하고 std::move 함수를 사용하지 않습니다. 실제로 아무것도 움직이지 마십시오. 단지 lvalue(객체를 참조하는 표현식)를 rvalue(임시 객체를 나타내는 표현식)로 변환할 뿐입니다. 이 변환은 lvalue 및 prvalue와 구별되는 xvalue 범주로의 캐스트를 통해 수행됩니다.

이 이름 지정 이유는 개념의 역사로 거슬러 올라갑니다. 원래 이동 작업은 값을 복사하지 않고 효율적으로 교환하는 방법으로 도입되었습니다. 이에 대한 초기 구문에는 static_cast를 사용하여 lvalue를 rvalue로 캐스팅하는 것이 포함되었습니다. 가독성을 높이고 이러한 캐스트의 의도를 전달하기 위해 static_cast의 구문 설탕으로 move 키워드가 도입되었습니다.

당시 맥락에서 "이동"이라는 용어를 사용하는 것은 이러한 캐스트의 목적을 나타냅니다. : 이동 의미를 활성화합니다. 결과적으로 코드는 정확한 기술적 작업(rvalue로 캐스팅)이 아니라 원하는 결과(객체 이동)를 전달합니다.

수년에 걸쳐 lvalue와 rvalue의 개념은 다음과 같은 방식으로 발전했습니다. 오늘날 우리가 갖고 있는 값 범주에는 rvalue로 변환된 객체를 나타내는 xvalue가 있습니다. 결과적으로 move 키워드는 내부적으로 발생할 수도 있고 발생하지 않을 수도 있는 동작만 암시하므로 오해의 소지가 있는 것으로 보일 수 있습니다.

그러나 가독성을 유지하기 위해 move 키워드 사용 선택은 유지되었습니다. Cast_to_xvalue와 같은 익숙하지 않은 구문으로 인해 발생할 수 있는 혼란을 피하세요. std::move 함수는 이름이 해당 작업의 기술적 세부 사항을 완벽하게 포착하지 못하더라도 프로그래머가 이동 의미를 간결하게 표현할 수 있도록 하는 귀중한 유틸리티로 남아 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿