C++ auto 타입 추론
1. 개요
1.1 문서 개요
이 문서는 C++의 auto
키워드를 사용한 타입 추론에 대해 설명합니다. auto
는 변수 선언 시 컴파일러가 초기화 표현식을 바탕으로 변수의 타입을 자동으로 추론하도록 지시하는 키워드입니다. C++11부터 도입되어 코드 가독성과 유지보수성 향상에 기여하며, 특히 복잡한 타입 선언에서 유용하게 사용됩니다.
2. 내용
2.1 auto 타입 추론 기본 개념
2.1.1 기본 문법
auto
는 변수 선언 시 초기화 표현식의 타입을 기반으로 컴파일 타임에 타입이 결정됩니다.
auto x = 10; // int
auto y = 3.14; // double
auto z = "hello"; // const char*
auto flag = true; // bool
2.2 복잡한 타입 추론
2.2.1 포인터, 참조, 상수 등
초기화 표현식의 특성에 따라 auto
는 const, reference, pointer 여부도 추론에 반영합니다.
int n = 5;
const int& ref = n;
auto a = ref; // int (const와 참조는 무시됨)
auto& b = ref; // const int& (참조 유지)
const auto& c = ref; // const int& (명시적 const 유지)
2.3 auto와 함수 반환 타입
2.3.1 람다 및 iterator
함수나 람다 반환값, iterator 타입이 복잡할 경우 auto
는 코드의 단순화에 매우 유용합니다.
std::vector<int> v{1, 2, 3};
auto it = v.begin(); // std::vector<int>::iterator
auto lambda = [](int x) { return x * 2; }; // 람다 표현식
2.3.2 C++14: 함수의 반환 타입 추론
C++14부터는 함수 선언 자체에도 auto
를 사용할 수 있습니다.
auto add(int a, int b) {
return a + b; // 반환 타입 자동 추론
}
2.4 auto의 주의점
2.4.1 괄호 없는 리스트 초기화와 auto
중괄호 초기화에서 auto
는 std::initializer_list
가 아닌 구체 타입을 추론합니다.
auto x = {1, 2, 3}; // std::initializer_list<int>
auto y{1}; // int (C++17 이상)
2.4.2 배열과 auto
배열을 auto로 선언하면 포인터로 추론될 수 있으므로 주의가 필요합니다.
int arr[] = {1, 2, 3};
auto ptr = arr; // int* 로 추론
3. 마무리
auto
는 타입을 명시적으로 지정하지 않고도 초기화 값으로부터 타입을 추론할 수 있는 기능으로, 특히 복잡한 표현식과 템플릿 기반 코드에서 가독성을 높이고 실수를 줄이는 데 기여합니다. 단, 참조 및 상수 속성은 명시적으로 제어하지 않으면 제거될 수 있으므로 문맥에 맞는 사용이 요구됩니다.