auto caution

auto는 초기화 식의 작은 차이를 그대로 따라간다

타입 이름을 줄이는 대신 리터럴 접미사, 중괄호 초기화, 참조 유지 여부를 읽을 수 있어야 의도와 결과가 어긋나지 않습니다.

숫자 리터럴 auto n = 1.0f;

접미사가 타입을 결정

1은 int, 1.0은 double, 1.0f는 float, 1LL은 long long입니다.

중괄호 auto xs = {1, 2, 3};

initializer_list가 될 수 있음

여러 값을 =와 중괄호로 묶으면 std::initializer_list<int>로 추론됩니다.

문자열 auto s = "Hello";

std::string이 아님

문자열 리터럴은 const char*로 붕괴합니다. 문자열 객체가 필요하면 명시적으로 만듭니다.

const 참조 auto x = cref;

값으로 받으면 한정자 제거

원본을 읽기 전용으로 보려면 const auto& x = cref;처럼 참조 형태를 씁니다.

copy?

복사가 의도인가

큰 객체나 컨테이너 요소 순회라면 auto보다 auto& 계열이 맞을 수 있습니다.

type?

리터럴 타입이 분명한가

숫자와 문자열은 짧아 보여도 추론 결과가 코드 의미를 바꿀 수 있습니다.

read?

읽기 전용이면 표시하기

const auto&는 복사를 피하면서 수정 의도가 없다는 사실을 함께 드러냅니다.

짧은 결론: auto를 쓸 때는 “초기화 식이 타입을 충분히 말하는가”와 “참조와 const를 유지해야 하는가”를 함께 확인합니다.