범용 및 전달 참조의 개념 이해
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!