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가 원치 않은 타입으로 추론될 수 있다.

auto는 컴파일 될 때 추론을 한다.

하지만 내가 원치 않은 추론을 할 수 있다.