C++시작과 문법

auto와 타입 추론

초기값으로부터 타입을 추론하는 `auto`와 참조, const가 함께 붙을 때의 의미를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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&가 더 맞는지 먼저 봐야 합니다.