20. C++ auto 타입 추론

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

중괄호 초기화에서 autostd::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는 타입을 명시적으로 지정하지 않고도 초기화 값으로부터 타입을 추론할 수 있는 기능으로, 특히 복잡한 표현식과 템플릿 기반 코드에서 가독성을 높이고 실수를 줄이는 데 기여합니다. 단, 참조 및 상수 속성은 명시적으로 제어하지 않으면 제거될 수 있으므로 문맥에 맞는 사용이 요구됩니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!
위로 스크롤