글을 작성하기에 앞서 아래의 링크에 걸려있는 내용을 참조하였음을 알려드립니다.
[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에 대해서 적어보도록 하겠습니다.
'Programming > C++' 카테고리의 다른 글
[7편] Modern C++정리: override / final (0) | 2017.03.23 |
---|---|
[6편] Modern C++정리: dafault / delete definition (0) | 2017.03.22 |
[4-5편] Modern C++정리: non-static data member initializers (0) | 2017.03.22 |
[3편] Modern C++정리: enum class (0) | 2017.03.22 |
[2편] Modern C++정리: range based for (0) | 2017.03.22 |