auto
자동 변수 auto
자동 변수는 단순히 지역 변수를 의미, 함수 안에서만 사용될 수 있는 것
auto라는 키워드는 생략해도 무방했다.
전부 생략해서 사용했기에 auto라는 키워드가 오래전부터 존재하였으나 생소한 것이 되어버렸다.
현재 auto는 컴파일 타임에 자동으로 적절한 타입으로 변경되는 키워드
근거는 변수가 초기화될 때 바로 어떤 타입으로 간주할 수 있기 때문이다.
auto는 컴파일 타임에 적절한 타입을 추론해서 해당 타입으로 변경되어야 한다.
현재까지는 auto가 타입을 추론하기 위해서는 선언 즉시 초기화가 이루어져야만 하며, 초기화가 존재하지 않을 경우 타입 추론에 실패하여 컴파일 에러가 발생하다.
auto는 초기화를 동반한 선언이 있을 경우 해당 초기화식을 통하여 타입을 추론할 수 있다.
초기 화식에서 함수를 사용하게 되면, 반환 타입에 따라서 변환될 수 있다.
초기화식 없이 선언될 경우 타입을 추론할 수 없다.
따라서 초기화식이 존재하지 않는 경우인 멤버 변수와 함수 인자에는 사용될 수 없다.
auto는 오직 비 참조 타입으로만 추론된다는 것을 기억해야만 한다.
auto를 이용해서 참조 타입을 사용하고 싶다면 auto&와 같은 표기를 사용해야 한다.
auto는 컴파일 타임에 자동으로 타입이 추론되기 때문에 잘만 사용하면 편하다.
특히 타입의 이름이 무척 길 경우 타이핑을 줄여주는 효과를 주기도 한다.
보통 auto는 STL 컨테이너와 함께 자주 쓰이는데,
STL 컨테이너의 반복자 타입의 이름이 생각보다 타이핑 하기에는 조금 길어지기 때문.
auto가 없었더라면 반복자를 정의하기 위해서 반복자 타입인 vector<int>::iterator를 모두 써줘야만 한다.
더 긴 타입의 경우 auto를 사용하지 않을 경우 코드가 어지럽게 보이는 경우도 적지 않다.
사실 typedef를 사용한다면 긴 타입도 짧은 이름으로 새롭게 정의할 수 있기 때문에 꼭 auto만으로 타이밍을 줄일 수 있는 것은 아니다. 그럼에도 auto를 사용하면 typedef를 할 수고조차 덜어주기 때문에 편리하게 사용할 수 있다.
auto는 typedef를 사용하지 못하는 타입에 대해서도 자동으로 추론을 할 수 있는 능력이 있기 때문에 람다 타입을 받는데도 사용될 수 있다.
지금까지의 정리
결국 프로그래밍의 목적은 데이터를 처리하는 것이며, 데이터에는 보통 타입이 존재하기 때문,
타입에 대한 정확한 이해는 프로그래밍의 기초를 튼튼하게 만들어 준다.