>  기사  >  백엔드 개발  >  C가 rvalue 참조와 범용 참조에 동일한 구문을 사용하는 이유는 무엇입니까?

C가 rvalue 참조와 범용 참조에 동일한 구문을 사용하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-05 14:47:02984검색

Why does C   use the same syntax for rvalue references and universal references?

Rvalue와 범용 참조가 구문을 공유하는 이유

C에서 rvalue와 범용 참조는 모두 T&&로 표시되는 동일한 구문을 공유합니다. . 이 선택은 잠재적인 혼란과 대체 구문의 가능성에 대한 의문을 제기했습니다.

Rvalue 참조

Rvalue 참조는 rvalue( 오른쪽 값) 표현식. 아래 그림과 같이 lvalue(왼쪽 값)가 참조에 바인딩되는 것을 방지합니다.

<code class="cpp">void foo(int&amp;&amp; a);

int i = 42;
foo(i); // error</code>

범용 참조

반면에 범용 참조는 다음에 바인딩할 수 있습니다. rvalue와 lvalue 모두. 이는 템플릿 인수 추론 및 참조 축소 규칙을 통해 달성됩니다. 다음 예를 고려하십시오.

<code class="cpp">template<typename T>
void bar(T&amp;&amp; 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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