Rvalue 참조 매개변수가 Lvalue 인수에 바인딩될 수 있는 이유
C에서 rvalue 참조는 rvalue에 바인딩될 것으로 예상됩니다. 그러나 rvalue 참조 매개변수가 lvalue 인수와 일치하는 경우가 있어 많은 프로그래머가 놀라는 경우가 있습니다.
다음 코드를 고려하세요.
void f(T&&); // #1 void f(T&); // #2
일반적으로 f(T&&)를 기대합니다. rvalue를 전달할 때 호출되는 오버로드와 lvalue에 대한 f(T&) 오버로드입니다. 그러나 동작은 다릅니다.
void g(T&& t) { f(t); // calls #2 }
이 예에서는 t가 rvalue임에도 불구하고 f(T&) 오버로드가 호출됩니다. 이는 rvalue 참조 유형에도 불구하고 t가 여전히 lvalue로 간주되기 때문에 발생합니다.
이유:
Rvalue는 일반적으로 이름이 없거나 이름이 손실되는 엔터티입니다. 곧 이름. Rvalue 참조는 rvalue에만 바인딩할 수 있습니다. 그러나 t에는 이름이 있으며 수명이 즉시 만료되지 않습니다.
T&& 유형:
T&&는 rvalue 참조 유형입니다. rvalue에만 바인딩할 수 있지만 그렇지 않은 경우 rvalue 참조 유형의 lvalue로 작동합니다. rvalue 참조 특성은 생성하는 동안과 decltype(variable_name)을 수행할 때만 중요합니다.
std::move()의 역할:
std::move( )는 다음을 수행하여 rvalue 참조를 반환합니다. static_cast
관련 규칙:
위 내용은 Rvalue 참조 매개변수는 언제 C의 Lvalue 인수에 바인딩될 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!