c++11에 추가된 auto 타입.
컴파일을 할 때 타입을 추론하여 어떤 타입인지 결정한다.
기본 내장 타입은 물론 컴파일 할 때 추론 가능한 모든 타입에 사용할 수 있다.
만약 추론이 불가능하다면 오류가 발생한다.
auto는 반드시 초기화를 해줘야 한다.
int x1; // 일반적인 변수이다.
// 이후의 코드에 따라서는 초기화가 안될 수 있지만 오류는 나지 않는다.
auto x2; // auto 변수이다.
// 컴파일 에러가 난다.
auto x3 = 0; // 에러가 나지 않고 변수 x3의 값이 정의 되었다.
반복문을 쓸 때 많이 쓰는 iterator다.
template <typename It> // b에서 e까지의 구간에 있는 모든
void dwim(It b, It e) // 요소에 대해 dwim("do what I mean")
{ // 알고리즘을 수행한다.
for (; b != e; ++b) {
typename std::iterator_traits<It>::value_type currValue = *b;
...
}
}
auto 타입을 사용하면
template <typename It>
void dwim(It b, It e)
{
for (; b != e; ++b) {
auto currValue = *b;
...
}
}
이렇게 된다.
typename std::iterator_traits<It>::value_type currValue = *b;
//라는 긴 선언이
auto currValue = *b;
//이렇게 짧아지게 된다.
auto는 컴파일 될 때 추론을 한다.
하지만 내가 원치 않은 추론을 할 수 있다.