Type Deduction

auto는 초기화식에서 타입을 추론합니다

타입 이름을 줄이는 편의 기능이지만, 참조와 const 보존 여부를 선언 형태로 분명히 골라야 합니다.

필수 조건auto value;처럼 초기화식이 없으면 컴파일러가 타입을 정할 수 없습니다.
auto 적용 위치반복자, 람다, 긴 템플릿 반환 타입처럼 명시 타입이 읽기를 방해할 때 선명합니다.
auto

값으로 새 변수를 만듭니다

참조와 top-level const는 떨어지고, 배열은 포인터로 붕괴될 수 있습니다.

auto&

원본 객체를 보존합니다

복사를 피하거나 원본을 수정해야 한다면 참조 형태를 선언에 직접 씁니다.

const auto&

읽기 전용 참조를 잡습니다

큰 객체를 복사하지 않으면서 수정 의도가 없음을 타입에 남깁니다.

리터럴10, 3.14, "Hello"는 각각 int, double, const char*로 추론됩니다.
반복자std::vector<int>::iterator처럼 긴 타입은 auto it = v.begin()으로 의도를 유지합니다.
명시 우선숫자 폭, 부호, API 문서성이 중요하면 int, double 같은 타입을 직접 씁니다.

추론 기준 auto를 쓸 때는 "타입 이름을 숨겨도 초기화식이 충분히 말해 주는가"와 "참조/const를 보존해야 하는가"를 함께 확인합니다.