2016-07-28 1 views
2

충돌 샘플을 가지고, 그래서 실험을했다 : 값을 구성 할 때C++ 11 "auto"키워드가 "cv-qualifier"를 검색합니까? 내가 뭔가를 CV-한정자를 검색하지 않습니다 "자동"고 말했다 것

const int i = 0; 
auto r1 = i; 
auto& r2 = i; 
r1 = 3;//ok 
r2= 3;//compilation error 

보이는을, CV-한정자는 새로운 변수 아니다 , "&"과 같이 사용하면 cv-qualifier도 함께 사용됩니다. 왜 그런가? 자동으로 "cv-qualifier"를 검색합니까?

+1

참조 : https://www.youtube.com/watch?v=wQxj20X-tIU –

+0

포인터를 사용하면 동일한 효과를 얻을 수 있습니다. –

답변

6

auto 공제는 대부분의 경우 템플릿 공제와 동일하게 작동합니다. auto 모두 방울 cv -qualifiers하지만 auto&cv- 참조 된 유형의 정량을 유지합니다. auto&이 한정어를 삭제하면 const 객체에 대한 const가 아닌 참조를 가져올 수 있습니다. 이 정확히 같은 방식으로 작동합니다 r2 이후

template <class T> deduce(T); 
template <class T> deduce_ref(T&); 

deduce(i);  // calls deduce<int> 
deduce_ref(i); // calls deduce<int const> 

const int에 대한 참조입니다, 당신은 그것에 할당 할 수 없습니다. 그러나 r1은 단지 i입니다.

관련 문제