posted by REDFORCE 2017. 3. 22. 15:49

글을 작성하기에 앞서 아래의 링크에 걸려있는 내용을 참조하였음을 알려드립니다.


[LINK] << Click - New Window

[slideshare] Modern C++ 프로그래머를 위한 CPP11/14 핵심  (저자: 홍배 최 교수)



평상시 공부하면서 지하철을 오갈때 할거 없으면 매번 이 슬라이드를 봤었다..

본거 또 보고 본거 또 보고...

그러나 아직도 공부하면서 스마트 포인터 같은 녀석들은 잘 써먹기가 힘든 것 같다.


-------------------------------------------------


이번 글에서는 그간 공부하면서 활용했던 Modern C++ 항목들에 대해 정리하고자 합니다.


Modern C++에 대한 정리 글은 총 12편으로 나뉘어 작성 될 예정 입니다.


목차


1. Auto

2. range based for

3. enum class

4. non-static data member initializers

5. initializer lists

6. default / delete definition

7. override / final

8. emplacement

9. constexpr

10. lambda

11. random

12. thread



이 글은 [1편] auto에 대한 내용입니다.


1. auto


auto 는 최근 개인적으로 코드를 작성할 때 iterator를 대용하는 목적으로 많이 이용하고 있는 방식이다.


 A. auto란??


auto에 대해서 간단히 설명하자면


 (1) 변수 정의 때 명시적으로 type을 지정하지 않아도 된다.

 (2) auto로 정의한 변수는 초기화할 때 type이 결정 된다.

 (3) 컴파일 타임 때 type이 결정 된다.

 (4) 템플릿 프로그래밍에 사용하면 코딩이 간편해진다.

 (5) 코드 가독성이 향상된다.

  (개인적으로 (5)번은 잘 모르겠다...개인적으로 써보면서 향상 되는건 사실이지만 남발하면.....= _=;;)



auto는 위와 같이 어느 변수타입이든 대용이 가능하다.


마치 c#의 var와 같은 느낌?


C++에는 var가 없기 때문에 위와 같이 auto를 활용할 수가 있다.



기본적으로 타입이 제한되어져서 나올 값들이라면 타입을 지정해서 쓰겠지만


string이나 char* 같은 녀석들을 리턴받고 던진다거나 빠르게 프로그래밍 해야 할 때는 auto로 받는것도 나쁘지 않을 것 같다.

(그래도 왠만하면 습관적으로 명시하여 쓰겠지만...)



위와 같이 포인터 형에 대한 것도 받아서 쓸 수가 있다.



참 편리하다...



구조체나 클래스도 마찬가지로 받을 수 있다.




그리고 본인이 개인적으로 가장 많이 활용하는 iterator의 대용이다.



정말 iterator 자체를 auto로 대용할 수 있다는 게 코드를 얼마나 많이 줄일 수 있는지는 그리고 auto를 알고 있다면


가독성이 얼마나 편해지는지 가늠 할 수 있을거라 봅니다.

(auto 짱짱맨!! |O_ o/)




 B. 일반함수의 반환 값 auto 지정에 의한 형 추론

  • C++ 14의 새로운 기능
  • 일반 함수에서도 반환 값 타임을 추론할 수 있는 기능
  • 반환 값 타입으로 auto를 사용한다.

   

위의 말 중에 반환 값 타입으로 auto를 사용한다가 무슨 말이냐면...


보통 함수의 반환 값으로 bool, int 등을 선언하여 반환 값 타입이 미리 지정하여 사용하지만..



auto를 활용하면!!


위와 같이 function 자체의 return 값을 auto 로 받아서 타입 추론형으로 반환 할 수가 있다.


이 얼마나 편하단말인가!!!

(auto 짱짱맨 |O_ o/)  x 10


근데 실제로 저렇게 반환시키는 코드를 작성해본 적은 없는거 같다.

(왜...?)


음...개인적으로 저런식으로 반환형 타입을 추론형으로 만들어버리면 


다른 클래스에서 저 함수의 리턴 타입이 auto로 나와버려서 대체 무슨 타입을 리턴하는거지? 


하고 한번더 함수를 F12 누르고 들어가게 됐었다.




꼭 필요할 땐 활용해야겠지만, 팀 프로젝트에서는 조금 자중할 필요가 있지 않을까? 하는 생각이 든다.




그리고 끝으로 auto를 사용할 땐 함수에서 리턴 타입을 동결시켜줘야 한다.


코드로 적어보자면 아래와 같다.




결론. auto 짱짱맨 |O_ o/  x 119




다음 글은 range based for에 대해서 적어보도록 하겠습니다.