std::vector<std::pair<int, std::string>> vec;
// 타입 추론 사용 X
for (std::vector<std::pair<int, std::string>>::iterator it = vec.begin();
}
// 타입 추론 사용
for (auto it = vec.begin(); it != vec.end(); ++it){
}
유지 보수성 향상
: 변수의 타입을 변경해야 할 때, auto를 사용하면 해당 변수의 타입을 한 곳에서만 변경하면 된다.
람다 호환성
: C++ 11 이상에서 람다 표현식을 사용할 때, auto를 사용하면 람다의 타입을 쉽게 처리할 수 있다.
auto func = [] (int a, int b) { return a + b; };
const auto를 사용하면, 각 요소는 루프의 각 반복마다 새로운 변수로 복사된다. 이 변수는 원본 컨테이너의 요소를 수정할 수 없다. 즉, 읽기 전용이다.
원본 데이터를 보호할 때 유용하지만, 복사 비용이 발생하기 때문에 큰 객체를 다룰 때 성능 저하가 발생할 수 있다.
for(const auto a : array){
if(height < a) answer++;
}
auto&를 사용하면, 컨테이너의 각 요소는 참조로 처리된다. 즉, 원본 요소에 대한 참조를 생성하여, 원본 데이터를 직접 수정할 수 있다. 복사가 발생하지 않아 성능상의 이점이 있다.
그러나 의도치 않게 데이터를 변경할 위험이 있다.
for(auto& a : array){
if(height < a) answer++;
}
for(const auto& a : array){
if(height < a) answer++;
}