>  기사  >  백엔드 개발  >  C에서 범용 참조와 전달 참조의 차이점은 무엇입니까?

C에서 범용 참조와 전달 참조의 차이점은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-10 12:53:02490검색

What is the Difference Between Universal References and Forwarding References in C  ?

범용 및 전달 참조의 개념 이해

C에서는 범용 참조와 전달 참조의 구분이 혼란스러울 수 있습니다. 두 용어 모두 동일한 개념을 나타내지만 시간이 지남에 따라 정확한 정의가 발전해 왔습니다.

C 11에서 "범용 참조"라는 용어는 rvalue 및 lvalue 참조를 모두 허용하는 템플릿 매개변수의 기능을 설명하기 위해 도입되었습니다. . 이는 cv-unqualified 템플릿 매개변수에 대한 rvalue 참조를 사용하여 달성되었습니다.

그러나 C 14가 도입되면서 "참조 전달"이라는 보다 정확한 용어가 채택되었습니다. C 14 표준에 정의된 대로 전달 참조는 "cv-한정되지 않은 템플릿 매개변수에 대한 rvalue 참조"입니다.

주요 차이점

유니버설 간의 주요 차이점 전달 참조는 의미론에 있습니다. 둘 다 rvalue 및 lvalue 참조를 모두 허용하지만 표준에서는 전달 참조의 경우 인수가 lvalue인 경우 주어진 인수에 대해 추론된 유형이 "A에 대한 lvalue 참조"임을 명확히 합니다.

전달

"전달 참조"라는 용어는 내부에서 std::forward 함수의 사용을 의미하지 않는다는 점에 유의하는 것이 중요합니다. 함수 본체. 전달 측면은 유형 추론 프로세스만을 나타냅니다. 이후에 참조가 전달되는지 여부는 중요하지 않습니다.

다음 함수 템플릿을 고려하세요.

template<typename A>
void foo(A&& a) {
  // Forwarding does not occur here
}

이 예에서 매개변수 a의 유형은 전달 참조입니다. lvalue가 이 함수에 인수로 전달되면 a의 유형은 "A에 대한 lvalue 참조"로 추론됩니다. 단, 함수 본체에서는 전달 작업을 수행하지 않습니다.

위 내용은 C에서 범용 참조와 전달 참조의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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