는 cppreference.com에 따르면, move
왜 그것의 arugment로를 rvalue 참조를 T&& t
걸립니까 서명을std :: move가 rvalue 참조를 인수로 사용하는 이유는 무엇입니까?
template< class T >
typename std::remove_reference<T>::type&& move(T&& t) noexcept;
이있다?
또한 다음 코드 나 컴파일러에서 오류가있어void foo(int&& bar) {
cout << "baz" << endl;
}
int main(){
int a;
foo(a);
}
무슨 일
의 "를 rvalue 참조를 좌변에 바인딩 할 수 없습니다"를 시도 할 때? 난 너무 혼란 스러워요.
'T && t'는 rvalue 참조라고 가정했습니다. 이것은시기 상조입니다.'T && t'가''T''가 무엇인지 알기 전까지는''rvlaue reference ''인지 아닌지를 말할 방법이 없습니다. 'T'가 추론 될 때 외부 조건에 따라'T && t'가 rvalue와 lvalue reference 사이를 전환하도록 언어 규칙 (형식 공제와 참조 축소)이 의도적으로 만들어집니다. – AnT
혼란 스럽습니다. 더블 앰프 &&는 문맥에 따라 두 가지 의미 중 하나를가집니다. 템플릿 매개 변수에서 "전달 참조"를 나타냅니다. –