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&&>(t));
기타 규칙 Rvalue 참조 관리
위 내용은 C 함수 오버로딩에서 Rvalue 참조가 때때로 Lvalue처럼 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!