C에서 동일한 구문을 공유하는 전달 참조와 rvalue 참조의 개념은 개발자들 사이에서 의문을 제기했습니다. 이 결정의 근거를 조사하고 구문을 자세히 살펴보겠습니다.
T&&로 표시되는 전달 참조와 T&&로 표시되는 rvalue 참조는 lvalue에 바인딩되지 않습니다. 그러나 동일한 구문으로 표시되는 범용 참조는 rvalue와 lvalue 모두에 바인딩될 수 있습니다. 이러한 이중 동작은 혼란스러워 보일 수 있으므로 기본 메커니즘을 명확히 하겠습니다.
T&&와 같은 범용 참조는 T를 "객체 유형" 또는 "참조 유형"으로 추론하는 기능을 보유합니다. rvalue가 전달되면 T는 객체 유형으로 추론될 수 있으며 결과적으로 T&& 유형의 함수 매개변수가 생성됩니다. 또는 lvalue가 전달되면 T는 참조 유형으로 추론하여 참조 축소 규칙에 따라 T&로 효과적으로 축소합니다.
이 동작은 템플릿 인수 추론 및 참조 축소 규칙과 원활하게 통합됩니다. 이제 템플릿 매개변수를 참조 유형으로 추론할 수 있습니다. 범용 참조의 구문은 이 추론 메커니즘과 일치하여 템플릿과 나머지 언어 전체에서 일관된 유형 시스템을 허용합니다.
C 위원회는 대체 구문을 신중하게 고려했지만 결국 반대하기로 결정했습니다. T&&&&&&, T*&, T@ 및 T&42와 같은 제안이 고려되었지만 불필요하고 잠재적으로 더 혼란스러운 것으로 간주되었습니다.
범용 참조에 대한 구문 T&&는 참조 축소 규칙과의 호환성을 보장하여 구문적으로 제공합니다. 객체 유형과 참조 유형을 처리하는 일관된 방법입니다. 전달 참조와 rvalue 참조에 동일한 구문을 사용함으로써 언어는 단순성을 유지하고 혼란을 최소화합니다.
위 내용은 C 전달 참조와 Rvalue 참조가 동일한 구문을 공유하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!