기본 패턴
cpp
auto count = 3;
const auto rate = 0.75;
auto& name = userName;
const auto& view = userName;설명
auto는 오른쪽 초기값을 바탕으로 타입을 추론하므로, 긴 타입 이름을 줄이고 선언을 더 읽기 쉽게 만들 수 있습니다.- 다만 추론은 "아무 타입이나 되는 마법"이 아니라 초기값에서 규칙적으로 결정되는 것이므로, 참조와
const가 유지되는지 빠지는지 함께 이해해야 합니다. auto value = expr;는 보통 값을 복사해서 새 객체를 만들고,auto&는 원본에 대한 참조를 유지합니다.- 범위 기반 for, iterator, pair, lambda 반환값처럼 타입이 길거나 자주 바뀌는 코드에서 특히 유용합니다.
- 반대로 타입이 코드 의미 자체인 위치에서는
auto를 과하게 쓰면 읽는 사람이 "결국 무슨 타입인가"를 다시 추적해야 할 수도 있습니다.
짧은 예제
cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> values{1, 2, 3};
for (auto value : values) {
std::cout << value << " ";
}
}빠른 정리
| 항목 | 설명 |
|---|---|
auto x = expr; | 초기값에서 값 타입을 추론 |
auto& x = expr; | 원본 객체에 대한 참조를 유지 |
const auto& x = expr; | 복사 없이 읽기 전용 참조를 만듦 |
| 장점 | 긴 타입 이름을 줄이고 리팩터링에 강함 |
| 주의점 | 복사와 참조 차이를 놓치면 의도와 다른 동작이 날 수 있음 |
주의할 점
for (auto item : container)는 원소를 복사합니다. 원본을 바꾸거나 복사를 피하고 싶다면 auto& 또는 const auto&가 더 맞는지 먼저 봐야 합니다.