> 백엔드 개발 > C++ > `std::move()`는 C에서 표현식을 rvalue로 어떻게 변환합니까?

`std::move()`는 C에서 표현식을 rvalue로 어떻게 변환합니까?

Susan Sarandon
풀어 주다: 2024-11-28 03:22:11
원래의
778명이 탐색했습니다.

How does `std::move()` convert expressions to rvalues in C  ?

std::move() 및 표현식을 R값으로 변환

std::move()는 C의 강력한 함수입니다. 개체를 복사하지 않고도 한 위치에서 다른 위치로 이동할 수 있습니다. 구현을 이해하는 것은 어려울 수 있지만 기능을 활용하는 데 필수적입니다.

구현 세부 정보

MSVC 표준 라이브러리에서 std::move() 구현은 다음을 사용합니다. 표현식을 rvalue로 변환하는 std::remove_reference 템플릿. 작동 방식은 다음과 같습니다.

template<class _Ty> inline
typename tr1::_Remove_reference< _Ty >:: _Type& &&
move( _Ty && _Arg ) {
  return ((typename tr1::_Remove_reference< _Ty >:: _Type&&) _Arg);
}
로그인 후 복사

Lvalue에 바인딩

lvalue를 std::move()에 전달하면 _Arg 참조 매개변수가 lvalue에 바인딩됩니다. . 그러나 rvalue 참조를 lvalue에 직접 바인딩할 수는 없습니다. 이 문제를 해결하기 위해 구현에서는 std::static_cast를 사용하여 lvalue를 rvalue 참조로 캐스팅합니다.

std::remove_reference 이해

std::remove_reference를 사용하여 제거합니다. 유형의 참조. 구현은 다음과 같습니다.

template<class _Ty>
struct _Remove_reference {
  typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference< _Ty && > {
  typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference< _Ty &&&&> {
  typedef _Ty _Type };
로그인 후 복사

Rvalue 사용

std::move()가 rvalue와 함께 호출되면 std::remove_reference는 T&&를 T로 변환합니다. 그 결과 다음과 같은 함수 템플릿 인스턴스화가 발생합니다.

Object&& move(Object&& arg) {
  return static_cast<Object&&>(arg);
}
로그인 후 복사

캐스트 명명된 rvalue 참조는 lvalue로 처리되기 때문에 필요합니다.

Lvalue 사용

std::move()가 lvalue와 함께 호출되면 std::remove_reference는 다음을 변환합니다. T&에서 T로, 다음과 같은 함수 템플릿 인스턴스화가 발생합니다.

Object&& move(Object& && arg) {
  return static_cast<Object&&>(arg);
}
로그인 후 복사

참조 C 11 표준에서 제공하는 축소 규칙을 사용하면 Object& &&가 lvalue에 바인딩될 수 있습니다. 결과 함수는 lvalue 인수를 rvalue 참조로 효과적으로 변환합니다.

결론

std::move()는 std::remove_reference 및 참조 축소 규칙을 활용하여 lvalue와 rvalue를 모두 rvalue 참조로 변환합니다. 이를 통해 효율적인 개체 이동과 메모리 사용 최적화가 가능합니다.

위 내용은 `std::move()`는 C에서 표현식을 rvalue로 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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