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가 있습니다. 결과적으로 이동 키워드는 내부적으로 발생할 수도 있고 발생하지 않을 수도 있는 작업만 암시하므로 오해의 소지가 있는 것으로 보일 수 있습니다.
그러나 가독성을 유지하기 위해 이동 키워드 사용 선택이 유지되었습니다. Cast_to_xvalue와 같은 익숙하지 않은 구문으로 인해 발생할 수 있는 혼란을 피하세요. std::move 함수는 이름이 해당 작업의 기술적 세부 사항을 완벽하게 포착하지 못하더라도 프로그래머가 이동 의미를 간결하게 표현할 수 있도록 하는 귀중한 유틸리티로 남아 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3