auto

 

C++11부터 선언 초기화 식에서 추론되는 형식으로 변수를 선언하는 역할을 한다. C++11 이전까지는 스택에 할당되는 지역 변수를 선언하는 키워드였다. 따라서 C++ 버전에 따라 달리 동작할 수 있으니 주의해야 한다.

복잡한 변수 선언을 간소하게 하고, 이름이 긴 자료형이나 헷갈릴 수 있는 자료형을 선언할 때 실수를 줄일 수 있다는 장점이 있다.

예를 들어 아래와 같은 코드가 있다고 가정하자.

#include <iostream>
using namespace std;

class ClassNameThatIsUnnecessarilyLong {
    ...
}

int main() {
    ClassNameThatIsUnnecessarilyLong temp;
    ClassNameThatIsUnnecessarilyLong* ptemp = &temp;
    ...
}

이름이 쓸데없이 길다면 오타가 생길 수 있고, 가독성도 나쁘므로 이를 auto를 이용하여 다음과 같이 바꿀 수 있다.

#include <iostream>
using namespace std;

class ClassNameThatIsUnnecessarilyLong {
    ...
}

int main() {
    ClassNameThatIsUnnecessarilyLong temp;
    auto* ptemp = &temp;
    ...
}

혹은 아래와 같이 기본적인 자료형에도 활용할 수 있다.

auto pi = 3.14;
auto n = 10;

3.14는 실수형이므로 pidouble 형으로, 10은 정수형이므로 nint 형으로 선언된다.

함수의 리턴 타입으로도 사용할 수 있다. 예를 들어 아래와 같은 코드가 있다고 하자.

int add(int a, int b) {
    return a + b;
}

매개변수를 더하여 반환하기 때문에 int 형이라는 추론이 가능하고 따라서 아래와 같이 auto 를 사용할 수 있다.

auto add(int a, int b) {
    return a + b;
}

STL 에서 iterator 변수를 간단히 선언하는데도 유용하게 사용할 수 있다. 예를 들어 아래와 같은 for 문이 있다 해보자.

for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
    ...
}

이때 아래와 같이 auto를 사용하여 간단히 할 수 있다.

for (auto it = v.begin(); it != v.end(); it++) {
    ...
}

이런 식으로 auto를 사용하면 vint 자료형이 들어가있는 벡터가 아니더라도 사용할 수 있다는 장점 역시 가진다.

auto 키워드는 함수 매개변수로 쓰일 수 없고, 구조체나 클래스 등의 멤버 변수로 쓰일 수 없다. 이때는 템플릿을 사용하면 된다.

 

애스터로이드