이 코드 고려 붕괴 참조 : 난 아직도 앞으로 호출 할 필요가 왜C++ (11) 완벽한 전달 및
template<typename T>
void foo(T&& param){ //In this case && is called universal reference
std:string tmp = std::forward<string>(param);
}
내 질문은 보편적 참조 유형 추론 할 수있는 경우를?
전달하지 않는 이유 T의 형식이 추론 된 경우에도 tmp의 올바른 c'tor가 호출되지 않습니다.
내 두 번째 질문은 참조 붕괴 규칙에 관한 것입니다 :
A& &&
이A&
A&& &&
이A&&
가되도록하게이 규칙에 따라 및 계정에서 보편적 인 기준을 복용하는 이유 표준 : 앞으로 서명 다음과 같을 수 없습니다 :
template<class T>
T&& forward(T&& arg){
return static_cast<T&&>(arg);
}
위의 규칙에 따라 T
의 유형이 rvalue 참조 인 경우 r 값 참조로 축소됩니다. T 유형이 l 값 참조 인 경우 lvalue 참조로 축소됩니다.
그런데 std::forward
에는 lvalue 참조와 rvalue 참조의 두 가지 다른 서명이 있는데 왜 내가 누락 되었습니까?
요즘은 '전달 참조'라고합니다. –
T $$ 란 무엇입니까? 그게 T &&라고 생각하니? – UpAndAdam