왼쪽 값이 rvalue 참조에 바인딩되는 방식을 이해하려고합니다.왼쪽 값이 rvalue 참조에
#include <iostream>
template<typename T>
void f(T&& x) {
std::cout << x;
}
void g(int&& x) {
std::cout << x;
}
int main() {
int x = 4;
f(x);
g(x);
return 0;
}
f()를 호출하는 동안 g()를 호출하면 컴파일 타임 오류가 발생합니다. 이런 종류의 바인딩은 템플릿에서만 작동합니까? 왜? 우리는 어떻게 든 템플릿없이 그것을 할 수 있습니까?
그건 의미가 있습니다. 그러나 템플릿이 필요 없다고 가정하면 위의 예에서 범용 참조를 얻을 수있는 방법이 있습니까? 나는 이것을 위해 약간의 질문을 편집했다. –
@ r.v lvalues ('void g (int &)')에 대해'g'의 두 번째 오버로드를 제공하거나'std :: move'로 lvalues를 * 이동할 수 있습니다. – 0x499602D2
그래, 가능한 해결책이지만 우리는 보편적 인 참조 라인에서 뭔가를 얻을 수 있었으면 좋겠다 : 유형 T (고정식, 템플릿이 아닌)가 주어지면 하나의 호출 (오버로드 없음)에서 T &와 T &&를 모두 일치시킬 수 있고 전달 , 등등. 그것은 확실히 일부 중복 코드를 줄이는 데 도움이됩니다. –