2012-10-10 2 views
1

방금 ​​Scott Meyers Universal References in C++11을 보았습니다. 이해할 수없는 것이있었습니다.자동 유형 차감 및 자동 및 자동 비교

과 "auto&&"의 차이점과 auto의 차이점에 대해 다소 혼란 스럽습니까?

Foo f; 
Foo& lvr = f; 

auto lvr_a = f; // Foo& 
auto rvr_a = std::move(f); // Foo&& or is it Foo? 

auto&& lvr_b = f; // Foo& && => Foo& 
auto&& lvr_b = std::move(f); // Foo&& && => Foo&& 

답변

2

자동 참조 유형을 유지합니다 자동 & & 반면, (즉, 복사 생성자와 사본을) 값 형식으로 붕괴 할 것이다.

는 여기를 참조하십시오 : C++11: Standard ref for action of `auto` on const and reference types

auto rvr_a = std::move(f); // Foo&& or is it Foo? 

그냥 Foo입니다. 그래서 이것은 다음과 같습니다 :

Foo rvr_a = std::move(f); // Foo&& or is it Foo? 

그러나 이것은 여전히 ​​이동 생성자를 호출합니다.

+0

'auto && rvr_b = std :: move (f)'이동 생성자를 호출하겠습니까? – ronag

+1

@ronag 아니오. 넷 효과는 참조 바인딩입니다. –

+0

@ronag : 여기를 참고하십시오 : http://stackoverflow.com/questions/9657708/c11-the-range-for-statement-range-init-lifetime –