2011년 03월 15일
C++ 0x : auto 키워드
★ 보통 우리가 주로 쓰는 C++ 같은 프로그래밍 언어는 정적언어라고 한다.  정적언어의 특징은 변수를 선언할 때 타입을 명시적으로 지정해줘야 한다는 것이다.

 그러나 그와 다르게 동적언어는 변수 타입을 명시적으로 지정하지 않고도 선언이 가능하다. Ruby나 Python이 그런 동적언어의 예이다. 타입을 지정하지 않고 변수 선언을 한다는 것은 타입이름이 길거나 복잡할 때 그것을 간편화 시킬 수 있다는 장점을 가지고 있다.


★ C# 또한 정적언어이다. 하지만 C#에는 var 라는 키워드가 있어서 변수의 타입을 명시적으로 지정할 필요가 없다.
 여기서 동적 언어들과의 차이점은 var 키워드를 쓴 변수타입은 컴파일 때에 결정이 된다는 것이다.

 C++도 0x 개정안이 적용되면서 이와 같은 키워드가 생겼다. 바로 auto 키워드이다.

→ auto 키워드의 특징은 변수를 선언시에 명시적으로 타입을 지정할 필요가 없다는 것이며 해당 변수의 타입은 컴파일 시에 결정된다는 것이다.


★ 그렇기에 auto를 쓰는데에 있어서 반드시 지켜야 할 점이 있다.

1. auto 키워드로 선언한 변수는 반드시 바로 초기화를 시켜줘야 한다는 것이다.
: 만약 auto 변수를 선언하고 초기화를 하지 않으면 컴파일 시에 해당 변수의 타입을 알 방법이 없기 때문에 컴파일 에러를 유발하게 될 것이다.

2. auto 변수는 지역 변수(혹은 객체)에 대해서만 쓴다.
: auto 키워드를 전역변수, 클래스 멤버변수 등에 쓰면 안되고, 함수의 매개변수도 안된다.

→ 이 점만 잘 지킨다면 문제없이 편리하게 쓸 수 있을 것이다.


★ 사용법은 이렇다.









→ 디버그로 살펴보면 numPractice의 타입은 int,  strFromPt의 타입은 const char * 라는 것을 알 수 있다.
 이렇게 초기화 때 받는 상수 혹은 변수 타입을 바탕으로 컴파일시에 타입이 자동적으로 결정되는 것이다.


★ 포인터 혹은 참조로도 auto를 쓸 수 있다.










→ 타입을 확인해 보면 pFive는 int *, refFive는 int & 타입이라는 것을 알 수 있다.


★ 객체 생성시에도 쓸 수 있다.





→ 예상한 대로 pBox의 타입은 CBox의 포인터 타입이 된다.


★ auto 키워드는 특히나 타입 이름이 긴 STL에서 더욱 효과적으로 사용된다.

→ auto 키워드를 안쓰면 이렇게 써야하는 벡터검색 for문 구문을..







→ 아래와 같이 써서 간략하게 바꿀 수 있다.







→ 벡터의 경우는 이렇게 되지만 연관 컨테이너 (map, set 등)에서는 타입이름이 훨씬 더 길게 되므로 보다 더 효율적으로 보기 좋은 코드를 만들 수 있다.


★ 위와 같이 auto 키워드의 주 장점은 타입 명시를 생략함으로써 코드를 간편하게 만들고 가독성을 더 좋게 할 수 있다는 점이다. 쓰기에도 불편한 점이 전혀 없어서 누구나도 쉽게 쓸 수 있을 것이다.


▷ 첫번째 C++ 0x 포스팅입니다. 이번에 새로 나온 것들 중 가장 쉽고 단순하다고 생각되는 auto 키워드인데, 잘 쓰면 유용하게 쓸 수 있을 듯 합니다. 다음은 static_assert 에 대하여 포스팅하도록 하겠습니다.
아참, 얘기 안한 내용이 있는데 C++ 0x는 Visual Studio 10 버전 (2010버전) 부터 적용이 됩니다. 꼭 참조하시길.

참조자료 → MS Visual Studio : Visual C++ 10과 C++0x < 최흥배 저 >
by 프롬 | 2011/03/15 14:29 | Story Of C++ | 트랙백 | 덧글(3)
트랙백 주소 : http://frompt.egloos.com/tb/2733939
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented at 2011/03/22 13:22
비공개 덧글입니다.
Commented at 2011/03/22 23:01
비공개 덧글입니다.
Commented at 2011/08/03 19:29
비공개 덧글입니다.

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>