Upload
jiung-choi
View
1.825
Download
0
Embed Size (px)
DESCRIPTION
c++11 수박 겉핡기
Citation preview
C++11
IMC Games 최지웅
개인적으론 C++0b가 더 좋은데..
twitter.com/McZombie 최 지웅 프로그래밍 4년 차 2008. 문화부 게임 아카데미 8기 2009. 컴퓨터 공학전공 2008~현재. IMC Games 엔짂 팀 XXXXXX 개발 중.
운젂 가능 한글 해석 가능 파워 유부남
뉘시오?
난이도
대상
C++11의 기초
내용
C++11?
추가된 C++ 문법
C++98, C++03도 있었음.
2011년 9월 12일 표준 제정.
기존의 tr1, boost의 기능들이 추가됨.
아직 Visual Studio에서 완벽히 지원하지 않음.
그래도 쓰지 않겠는가?
초급
초급++
그 외
>> | auto | using | for | nullptr | brace_init | array
move_sementic | Lamda | closure | STL Feature
unique_ptr | tuple | bind
초급 - >>
띄어 쓰기 안 해도 됩니다.
초급 - auto
Compile Time에 Type 자동 지정.
초급 - auto
이런 식으로…
벗! 이런 식으로 쓰다갂 주화 입마에 빠짐.
초급 - auto
이런 거 라던지..
이런 거 라던지…
타이핑하기 귀찮은 것들만 사용하자.
초급 - using
typedef와 같다.
초급 – RangeBased_for
while이나 for_each보다 편함.
초급 – nullptr 포인터의 초기화
p1과 p2가 같다곤 하지만…
초급 – brace_init 변수 혹은 객체의 초기화
초급 – brace_init
초급 – brace_init 이런 방식으로도 초기화 됨.
초급 – brace_init 하지만 “=“는 아무 곳에나 붙이는 게 아님.
초급 – array Fixed Array
초급 – array vector와 비교?
array는 static, vector는 dynamic
array::swap은 선형시간. vector::swap은 상수시간.
array는 tuple처럼 사용 가능 vector는 불가능
초급 – array C Array와 비교?
array는 사이즈를 알고, C는 모른다
array는 0 size 가능, C는 안됨
array는 대입가능, C는 불가능
array는 tuple처럼 사용 가능 c는 불가능
C의 Array는 그만 쓰지 않겠는가?
초급
초급++
그 외
>> | auto | using | for | nullptr | brace_init | array
move_sementic | Lamda | STL Feature
unique_ptr | tuple | bind
초급++ – move_sementic 흔핚 STL 컨테이너에 값 집어 넣기
벡턱 용량이 늘어나면 컨테이너 내용이 복사됨.
초급++ – move_sementic 컨테이너가 늘어날 때?
C++11에서는 Move생성자가 호출
이젂 버젂에서는 복사 생성자가 호출
초급++ – move_sementic 그렇다면 move sementic이 뭐냐?
말 그대로 메모리의 이동.
오브젝트를 다른 메모리로 이동시킨다.
초급++ – move_sementic 메모리 이동???
메모리 이동의 조건?
초급++ – move_sementic R-value reference 일 때. 우리가 흔히 말하는 참조는 L-value Reference
초급++ – move_sementic L-value와 R-value의 차이?
L-value address를 가짂 모든 것. - 이름을 가짂 변수
address를 가지지 않은 것. - 이름이 없는 변수. - 34, “배고파” 등등… 호출핛 때 만들어지는 변수
R-value
초급++ – move_sementic 왜 저렇게 구분했을까?
만약 R-Value로 생성되어 Function이 호출되면… - Function 안에서 데이터가 변경되었을 때 - vi에 바로 적용되어 버립니다.
초급++ – move_sementic && 작성하는 법.
이런 방식으로 복사하지 말고 포인터를 받는다.
초급++ – move_sementic 퍼포먼스의 차이는?
아무튼 짱 빠르다… + DOD에 적합.
컨테이너에 포인터만 넣을려고 하지 말자.
초급++ – Lamda 람다?
이것들은람각
대충 지역 함수라 생각하면 편하다.
초급++ – Lamda
이런 느낌…
이런 것보다는 functor사용에 유리…
초급++ – Lamda
이런… 노가다 타이핑을 했었다.
예젂에는…
람다를 사용하면 어떻게 될까? 속도만 안 빨랐어도 STL function들은 안 쓰는데…
초급++ – Lamda
이것으로 오케이!
깔끔하게 써주면… 이런 느낌.
초급++ – Lamda 사실 더 좋은게…
Local 변수도 넘겨 줄 수 있습니다. (참조와 복사 가능)
“복사를 이용해서 변수 넘겨주겠다”
초급++ – Lamda 람다를 쓰세요.
그렇다고 큰 함수를 만들 때 사용은 금물!
람다는 짧고 깨끗해야 핚다.
리턴이 여러 개 일 경우 함수로 사용하는 게 좋다.
…뭐 잘 알아서 써 보자.
초급++ – STL Feature ::emplace_back
초급++ – STL Feature const_iterator support
실제로 큰 차이는 없어 보인다.
초급++ – STL Feature shrink_to_fit
줄일 수 있음. vector, deque, string
초급++ – STL Feature
단방향 연결 리스트 : forward_list
std::list와 의 차이
int형 1개에 대해서 list는 12바이트, f_list는 8바이트
속도가 발톱만큼 forward_list가 빠르다
그 외는 싱글리스트와 더블링크드 리스트 차이.
초급
초급++
그 외
>> | auto | using | for | nullptr | brace_init | array
move_sementic | Lamda | STL Feature
unique_ptr | tuple | bind
그 외 – unique_ptr
auto_ptr을 대체할 놈
autor_ptr은 deprecation됨.
auto_ptr은 복사 표현으로 통해서 move를 구현.
따라서 generic 알고리즘과 함께 사용핛 수 없다.
generic알고리즘은 실제로 복사를 기준으로 만들어짐.
근데 아직 auto_ptr이나 shared_ptr의 좋은 점을 모르겠음…
그 외 – tuple
std::pair의 일반화
…걍 구조체 써라.
아직은 존재 이유를 모르겠다.
그 외 – bind
bind1st와 bind2nd 일반화 버젼
그 외 – bind
근데… 람다가 있다.
어렵게 bind쓰지 말고 lamda 사용
정리
못 다룬 게 더 많다. thread, function, move, unicode support, 등등
아직 컴파일 안 되는 것도 많다. range_based_for, brace_init, using…
그래도 쓸만한 것은 굉장히 많다. range_based_for, brace_init, lamda, move_sementic, STL Feature, Array
move_sementic과 lamda만으로도 행복 성능 업그레이드와 없어짂 노가다 코딩
2010으로 프로젝트를 업그레이드 해 보아요.
레퍼런스
1) Overview of The New C++(C++0x) (Scott Meyers)
2) http://cpp-next.com/archive/2010/10/howards-stl-move-semantics-benchmark/
3) http://vsts2010.net/
4) http://ikpil.com/695
C++11
질문할 게 있으시겠냐만은…