>백엔드 개발 >C++ >C 함수 오버로딩에서 Rvalue 참조가 때때로 Lvalue처럼 작동하는 이유는 무엇입니까?

C 함수 오버로딩에서 Rvalue 참조가 때때로 Lvalue처럼 작동하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-29 22:50:11303검색

Why Does an Rvalue Reference Sometimes Act Like an Lvalue in C   Function Overloading?

Rvalue 참조 변수 이해

C에서 rvalue 참조는 rvalue(이름이 없는 값)에만 바인딩할 수 있는 특수한 유형의 참조입니다. ). 그러나 함수가 lvalue 참조와 rvalue 참조 오버로드로 오버로드되면 놀라운 동작이 발생합니다.

혼란: Rvalue 참조 변수가 Lvalue처럼 동작

다음 함수 오버로드:

void f(T&&); // Overload #1 (rvalue reference)
void f(T&);  // Overload #2 (lvalue reference)

다른 함수 내 함수:

void g(T&& t) 
{ 
  f(t);  // Calls Overload #2 (lvalue reference)
}

놀라운 결과는 인수 t가 rvalue 참조임에도 불구하고 오버로드 #2(lvalue 참조)가 호출된다는 것입니다.

이유: Rvalue 참조는 특수 유형의 Lvalue

Rvalue 참조는 이름이 있고 사용할 수 있으므로 lvalue로 간주됩니다. 대부분의 경우 lvalue로 사용됩니다. 그러나 해당 유형인 rvalue 참조는 제한된 바인딩 기능을 지정합니다.

Rvalue 참조 오버로드를 호출하는 방법

rvalue 참조 오버로드를 호출하려면 인수는 다음과 같아야 합니다. static_cast 연산자를 사용하여 rvalue 참조로 명시적으로 변환:

f(static_cast<T&amp;&amp;>(t));

기타 규칙 Rvalue 참조 관리

  • T&&는 템플릿 컨텍스트에서 전달 참조로 작동할 수 있습니다.
  • T&&는 rvalue에 바인딩하거나 rvalue에 대한 참조(X const&&)를 바인딩할 수 있습니다.
  • Rvalue 참조에는 정적 바인딩 속성과 동적 바인딩 속성이 모두 있습니다.
  • 참조 수명 확장은 rvalue 참조가 임시 값에 직접 바인딩되어 참조 수명이 만료될 때까지 수명을 연장할 때 발생합니다.

위 내용은 C 함수 오버로딩에서 Rvalue 참조가 때때로 Lvalue처럼 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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