[C++] auto 키워드

타입을 명시적으로 쓰지 않아도 코드에 맞게 자료형을 추론해 주는 키워드

컴파일러가 컴파일하는 과정에서 실제로 자료형을 결정한다. 

컴파일 단계에서 결정을 해야 하기 때문에 반드시 초기화를 해야 한다.

 

auto test;    // 컴파일 에러

auto test2 = 1;

test2 = 3     //컴파일 에러

 

auto로 포인터를 받으면?

Object* pNode = new Object;

auto pNodePtr = pNode;  

 

pNode와 pNodeptr은 동일한 포인터이다!

 

컴파일러가 어떤 형인지 알아낼 수 있다.

하지만 저렇게 포인터를 사용한다면 가독성이 매우 좋지 않다.

 

그렇다면 auto로 참조를 받으면?

Object pNode;

Object& pNodeRef = pNode;

auto pNodeRef_2 = pNodeRef;

 

pNodeRef_2는 참조로 받아졌을까? 

 

참조의 경우는 복사나 대입 된거와 다르기 때문에 컴파일러가 알 수 없어서 참조로 받아 지지 않는다.

하지만 auto&를 사용 하면 레퍼런스로 받을 수 있다.

 

auto로 const 받으면?

const int a = 1;

auto& b = a;

 

b는 const를 이어 받는다.

컴파일러가 const or non-const를 알 수있다.

 

auto키워드의 경우 

auto*, auto&, const auto& 모두 다 가능하기 때문에 포인터를 사용하거나 참조를 사용 할 때는 해당 키워드를 통해서 사용 해 주도록하자

auto를 사용하게 되면 타이핑이 줄어 들 순 있지만 가독성이 매우 좋지 않기 때문에 협업시 그닥 좋지는 않은거 같다.

다만 반복자나, 템플릿의 경우는 예외로 사용 해도 좋다고 생각한다.

 

반복자

for(std::vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it)

{
        ........

}

 

for( const auto& it = vec.begin(); it != vec.end(); ++it)

{
        ........

}

 

템플릿

create<Enemy>* pEnemy = new create<Enemy>(100);

auto* pEnemy  new create<Enemy>(100);

 

반복자의 경우는 많이 귀찮기 때문에...

컴파일 단계에서 결정이 나기 때문에 런타임 성능은 동일하여 사용 하는건 무방하나.. 명시적이지 않아서 가독성이

나쁘니 선택을 잘 하여서 쓰자.

 

 

 

공부한 내용을 정리하는 거라 잘못 된 부분이 있을 수 있습니다.

그리드형(광고전용)

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band

댓글

Designed by JB FACTORY