> 백엔드 개발 > C++ > C 11 참조 축소 규칙은 어떻게 완벽한 전달을 가능하게 합니까?

C 11 참조 축소 규칙은 어떻게 완벽한 전달을 가능하게 합니까?

Linda Hamilton
풀어 주다: 2024-12-26 22:27:13
원래의
452명이 탐색했습니다.

How Do C  11 Reference Collapsing Rules Enable Perfect Forwarding?

C 11에서 참조 축소 규칙의 역할

참조 축소 규칙은 C 11에서 완벽한 전달을 가능하게 하는 데 중요한 역할을 합니다. 완벽한 전달을 통해 값, lvalue 참조 또는 rvalue별로 매개변수를 원활하게 받아들이고 전달하는 함수 reference.

참조 축소 규칙

C 11의 참조 축소 규칙은 다음과 같습니다.

  • A& & & -> A&
  • A& & & -> A&
  • A& & & -> A&
  • A&&&&& -> A& &

참조 축소의 이론적 근거

이 규칙은 매개변수가 전달되는 방식(lvalue, rvalue 또는 rvalue 참조)에 관계없이 다음을 보장합니다. 완벽을 위한 원하는 유형으로 수신 기능에 의해 항상 "표시"됩니다. 전달.

  • Lvalue 참조로: lvalue 참조(예: T&)로 lvalue를 전달할 때 축소 규칙은 "& & &"를 "&"로 변환합니다. 수신자의 non-const lvalue 참조에 바인딩하기 위한 올바른 lvalue 참조.
  • Const로 Lvalue 참조: const lvalue 참조(예: const T&)로 const lvalue를 전달할 때 축소 규칙은 constness가 유지되고 매개변수가 수신자의 올바른 const lvalue 참조에 바인딩되도록 보장합니다.
  • Rvalue 참조: 들어오는 값 유형에 관계없이 rvalue 참조(예: T& &)를 전달하면 축소가 발생합니다. xvalue(임시 개체) 및 prvalue(T& & 유형의 함수 반환 값)를 완벽하게 전달할 수 있는 "& &"로.

C 11 STL 유틸리티 함수의 활용

std::move() 및 std::forward()와 같은 STL 유틸리티 함수는 참조를 활용합니다. 완벽한 전달을 용이하게 하기 위해 내부적으로 축소됩니다. 예를 들면 다음과 같습니다.

template<class T>
void Fwd(T & &v) {
  Call(std::forward<T>(v));
}
로그인 후 복사

std::forward<> lvalue 참조의 경우 "& &"를 "&"로, rvalue 참조의 경우 "& &"를 "& &"로 축소하여 Call이 해당 매개변수를 적절한 형식으로 받을 수 있도록 합니다.

std와의 관계: :remove_reference

std::remove_reference와 같은 유틸리티를 사용하여 유형 추론에서 참조를 제거할 수 있습니다. (예를 들어, std::remove_reference는 T를 반환합니다). 그러나 C 11의 참조 축소 규칙의 필요성을 대체하지는 않습니다. std::remove_reference는 단순히 참조 레이어를 제거하는 반면, 참조 축소는 전달된 매개변수가 완벽한 전달을 위해 올바른 형식으로 수신되도록 보장합니다.

위 내용은 C 11 참조 축소 규칙은 어떻게 완벽한 전달을 가능하게 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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