Rvalue와 범용 참조가 구문을 공유하는 이유
C에서 rvalue와 범용 참조는 모두 T&&로 표시되는 동일한 구문을 공유합니다. . 이 선택은 잠재적인 혼란과 대체 구문의 가능성에 대한 의문을 제기했습니다.
Rvalue 참조
Rvalue 참조는 rvalue( 오른쪽 값) 표현식. 아래 그림과 같이 lvalue(왼쪽 값)가 참조에 바인딩되는 것을 방지합니다.
<code class="cpp">void foo(int&& a); int i = 42; foo(i); // error</code>
범용 참조
반면에 범용 참조는 다음에 바인딩할 수 있습니다. rvalue와 lvalue 모두. 이는 템플릿 인수 추론 및 참조 축소 규칙을 통해 달성됩니다. 다음 예를 고려하십시오.
<code class="cpp">template<typename T> void bar(T&& b); bar(i); // okay</code>
bar 함수에서 템플릿 매개변수 T는 rvalue가 전달될 때 int로 추론될 수 있으며 결과적으로 int&&의 함수 매개변수가 됩니다. 마찬가지로, lvalue가 전달되면 T는 int&로 추론될 수 있으며 결과적으로 int&라는 함수 매개변수가 생성됩니다.
공유 구문 이유
공유의 근거 rvalue 및 범용 참조에 대한 동일한 구문은 인수 추론 및 참조 축소에 대해 동일한 규칙을 따른다는 사실에 있습니다. 이러한 일관성을 통해 템플릿에서 전달 참조(완벽한 전달)를 원활하게 통합할 수 있습니다.
T&&&, T&* 또는 T@와 같은 대체 구문을 채택하면 복잡성이 더 커집니다. 언어에. 더욱이 이러한 대체 표기법에는 자체적인 문제와 모호성에 대한 가능성을 제시하는 새로운 문법 규칙의 도입이 필요합니다.
대체 구문 거부
C 위원회는 대안을 고려했습니다. 구문을 사용했지만 궁극적으로 다음과 같은 이유로 이를 거부했습니다.
요약하면 rvalue와 범용 참조 간의 공유 구문은 깨끗하고 일관된 처리 접근 방식을 제공합니다. C의 전달 참조 및 rvalue 의미 체계. 참조 축소 규칙과의 일관성으로 인해 별도의 구문이 필요하지 않으며 언어 유형 시스템의 무결성이 유지됩니다.
위 내용은 C가 rvalue 참조와 범용 참조에 동일한 구문을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!