>백엔드 개발 >C++ >C 전달 참조와 Rvalue 참조가 동일한 구문을 공유하는 이유는 무엇입니까?

C 전달 참조와 Rvalue 참조가 동일한 구문을 공유하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-07 17:36:03981검색

Why Do C   Forwarding References and Rvalue References Share the Same Syntax?

전달 참조와 rvalue 참조가 동일한 구문을 공유하는 이유는 무엇입니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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