[C++11] auto 키워드

원래 auto 키워드는 저장 클래스 지정자(storage class specifier) 중으로 하나로 기본 지정자입니다. 기본 지정라는 의미는 굳이 지정하지 않아도 자동으로 auto로 지정된다는 의미입니다. 그러다보니 거의 사용되지 않는 키워드였는데 C++11에서 이 키워드에 매우 강력한 기능을 부여하게 되었습니다.

C++11에서 auto에 대해 새롭게 부여한 기능으로써 의미는 컴파일 타임에서 자동으로 type을 지정할 수 있도록 하는 것입니다. 아래의 코드를 예로 살펴보면 직관적으로 auto의 의미를 파악할 수 있을 것입니다.

#include "stdafx.h"
#include ;
#include 

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    vector v;
    for(int i=0; i<10; ++i)
    {
        v.push_back(i);
    }

    vector::iterator it = v.begin();
    while(it != v.end()) {
        cout << *it << endl;
        it++;
    }

    return 0;
}

위의 코드는 우리가 흔히 C++11 이전에 써오던 코드입니다. 눈여겨 봐야할 부분은 바로 15번 코드입니다. 반복자(iterator)의 타입을 선언하기 위해 vector::iterator과 같이 제법 긴 타입명을 사용하고 있습니다. 예제이니 그렇지 실제 코드에서는 더욱 더 긴 타입명이 빈번하게 나옵니다. 이를 auto라는 키워드를 통해 다음처럼 단순하게 만들 수 있습니다.

#include "stdafx.h"
#include ;
#include 

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    vector v;
    for(int i=0; i<10; ++i)
    {
        v.push_back(i);
    }

    auto it = vInt.begin();
    while(it != v.end()) {
        cout << *it << endl;
        it++;
    }

    return 0;
}

변경된 부분은 오직 앞서 언급한 15번 코드입니다. 바로 vector::iterator 대신 auto를 사용했습니다. auto로 선언된 데이터 타입은 컴파일 시점에서 컴파일러에 의해 상당히 정확하게 그 타입을 유추해 결정해 줍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다