auto
C+11이전의 auto는 지역 변수 선언에 해당하는 기억 분류 지정자입니다. 어차피 생략하면 auto로 지정되고 스택을 사용하도록 컴파일하기 때문에 사실상 거의 사용하지 않았습니다.
auto int x = 10; // int x = 10; 과 동일
C+11로 변경되면서 auto의 의미가 새롭게 바뀌었습니다. 초깃값의 형식에 맞춰 선언하는 인스턴스의 형식이 ‘자동’으로 결정됩니다. 즉, 컴파일러가 자동으로 형식을 규정하는 자료형입니다. 컴파일 타입에 실행됩니다.
컴파일러 입장에서 auto만 보고 변수 타입을 판단할 수 없기 때문에 선언만 하고 초기화를 하지 않으면 사용할 수 없습니다.
auto a = 10; // int로 추론
- auto 변수는 반드시 선언과 함께 초기화해야 한다.
- 함수에서 매개변수의 형식 지정자로 사용할 수 없다.
- 구조체나 클래스의 멤버 변수로 사용할 수 없다.
- auto 변수를 반환하는 함수는 dctltype을 사용해야 한다.
placeholder type specifier(플레이스홀더 형식 지정자)
보통 초기값을 기반으로 타입이 유추되는, 컴파일러가 자동으로 추론합니다.
auto와 decltype 키워드가 있으며 auto는 변수 선언과 초기화에 주로 사용되지만, decltype은 변수 선언뿐만 아니라 함수 템플릿이나 클래스 템플릿에서 반환값의 형식을 연역하는 데도 사용할 수 있습니다.
template<typename T, typename U>
auto add(T t, U u) -> decltype(t + u) // return type depends on template parameters
// return type can be deduced since C++14
{
return t + u;
}
C+11의 경우 반환값의 형식을 나타내는 자리에 auto 키워드만 사용하면 오류가 발생합니다. -> decltype(t + u) 를 사용해 반환 타입을 명시적으로 지정해줬습니다.
C+14부터는 반환 타입 추론이 자동으로 이루어져 decltype(t + u)를 명시할 필요 없이
template<typename T, typename U>
auto add(T t, U u)
{
return t + u;
}
위와 같이 써도 되도록 바뀌었습니다.
출처 : 이것이 C++이다 책, C++ 완전 정복 책, https://en.cppreference.com/w/cpp/keyword/auto
'내일배움캠프 > TIL' 카테고리의 다른 글
[내일배움캠프 Day32] 가상 함수 동작 원리 (0) | 2025.02.04 |
---|---|
[내일배움캠프 Day31] 순차 컨테이너 (3) | 2025.02.03 |
[내일배움캠프 Day29] 정렬 (1) | 2025.01.27 |
[내일배움캠프 Day28] 7주차 과제 진행 (1) | 2025.01.24 |
[내일배움캠프 Day27] 플레이어 이동 처리하기 (1) | 2025.01.23 |