47
C++11 IMC Games 최지웅 개인적으론 C++0b가 더 좋은데..

c++11

Embed Size (px)

DESCRIPTION

c++11 수박 겉핡기

Citation preview

Page 1: c++11

C++11

IMC Games 최지웅

개인적으론 C++0b가 더 좋은데..

Page 2: c++11

twitter.com/McZombie 최 지웅 프로그래밍 4년 차 2008. 문화부 게임 아카데미 8기 2009. 컴퓨터 공학전공 2008~현재. IMC Games 엔짂 팀 XXXXXX 개발 중.

운젂 가능 한글 해석 가능 파워 유부남

뉘시오?

Page 3: c++11

난이도

대상

C++11의 기초

내용

Page 4: c++11

C++11?

추가된 C++ 문법

C++98, C++03도 있었음.

2011년 9월 12일 표준 제정.

기존의 tr1, boost의 기능들이 추가됨.

아직 Visual Studio에서 완벽히 지원하지 않음.

그래도 쓰지 않겠는가?

Page 5: c++11

초급

초급++

그 외

>> | auto | using | for | nullptr | brace_init | array

move_sementic | Lamda | closure | STL Feature

unique_ptr | tuple | bind

Page 6: c++11

초급 - >>

띄어 쓰기 안 해도 됩니다.

Page 7: c++11

초급 - auto

Compile Time에 Type 자동 지정.

Page 8: c++11

초급 - auto

이런 식으로…

벗! 이런 식으로 쓰다갂 주화 입마에 빠짐.

Page 9: c++11

초급 - auto

이런 거 라던지..

이런 거 라던지…

타이핑하기 귀찮은 것들만 사용하자.

Page 10: c++11

초급 - using

typedef와 같다.

Page 11: c++11

초급 – RangeBased_for

while이나 for_each보다 편함.

Page 12: c++11

초급 – nullptr 포인터의 초기화

p1과 p2가 같다곤 하지만…

Page 13: c++11

초급 – brace_init 변수 혹은 객체의 초기화

Page 14: c++11

초급 – brace_init

Page 15: c++11

초급 – brace_init 이런 방식으로도 초기화 됨.

Page 16: c++11

초급 – brace_init 하지만 “=“는 아무 곳에나 붙이는 게 아님.

Page 17: c++11

초급 – array Fixed Array

Page 18: c++11

초급 – array vector와 비교?

array는 static, vector는 dynamic

array::swap은 선형시간. vector::swap은 상수시간.

array는 tuple처럼 사용 가능 vector는 불가능

Page 19: c++11

초급 – array C Array와 비교?

array는 사이즈를 알고, C는 모른다

array는 0 size 가능, C는 안됨

array는 대입가능, C는 불가능

array는 tuple처럼 사용 가능 c는 불가능

C의 Array는 그만 쓰지 않겠는가?

Page 20: c++11

초급

초급++

그 외

>> | auto | using | for | nullptr | brace_init | array

move_sementic | Lamda | STL Feature

unique_ptr | tuple | bind

Page 21: c++11

초급++ – move_sementic 흔핚 STL 컨테이너에 값 집어 넣기

벡턱 용량이 늘어나면 컨테이너 내용이 복사됨.

Page 22: c++11

초급++ – move_sementic 컨테이너가 늘어날 때?

C++11에서는 Move생성자가 호출

이젂 버젂에서는 복사 생성자가 호출

Page 23: c++11

초급++ – move_sementic 그렇다면 move sementic이 뭐냐?

말 그대로 메모리의 이동.

오브젝트를 다른 메모리로 이동시킨다.

Page 24: c++11

초급++ – move_sementic 메모리 이동???

메모리 이동의 조건?

Page 25: c++11

초급++ – move_sementic R-value reference 일 때. 우리가 흔히 말하는 참조는 L-value Reference

Page 26: c++11

초급++ – move_sementic L-value와 R-value의 차이?

L-value address를 가짂 모든 것. - 이름을 가짂 변수

address를 가지지 않은 것. - 이름이 없는 변수. - 34, “배고파” 등등… 호출핛 때 만들어지는 변수

R-value

Page 27: c++11

초급++ – move_sementic 왜 저렇게 구분했을까?

만약 R-Value로 생성되어 Function이 호출되면… - Function 안에서 데이터가 변경되었을 때 - vi에 바로 적용되어 버립니다.

Page 28: c++11

초급++ – move_sementic && 작성하는 법.

이런 방식으로 복사하지 말고 포인터를 받는다.

Page 29: c++11

초급++ – move_sementic 퍼포먼스의 차이는?

아무튼 짱 빠르다… + DOD에 적합.

컨테이너에 포인터만 넣을려고 하지 말자.

Page 30: c++11

초급++ – Lamda 람다?

이것들은람각

대충 지역 함수라 생각하면 편하다.

Page 31: c++11

초급++ – Lamda

이런 느낌…

이런 것보다는 functor사용에 유리…

Page 32: c++11

초급++ – Lamda

이런… 노가다 타이핑을 했었다.

예젂에는…

람다를 사용하면 어떻게 될까? 속도만 안 빨랐어도 STL function들은 안 쓰는데…

Page 33: c++11

초급++ – Lamda

이것으로 오케이!

깔끔하게 써주면… 이런 느낌.

Page 34: c++11

초급++ – Lamda 사실 더 좋은게…

Local 변수도 넘겨 줄 수 있습니다. (참조와 복사 가능)

“복사를 이용해서 변수 넘겨주겠다”

Page 35: c++11

초급++ – Lamda 람다를 쓰세요.

그렇다고 큰 함수를 만들 때 사용은 금물!

람다는 짧고 깨끗해야 핚다.

리턴이 여러 개 일 경우 함수로 사용하는 게 좋다.

…뭐 잘 알아서 써 보자.

Page 36: c++11

초급++ – STL Feature ::emplace_back

Page 37: c++11

초급++ – STL Feature const_iterator support

실제로 큰 차이는 없어 보인다.

Page 38: c++11

초급++ – STL Feature shrink_to_fit

줄일 수 있음. vector, deque, string

Page 39: c++11

초급++ – STL Feature

단방향 연결 리스트 : forward_list

std::list와 의 차이

int형 1개에 대해서 list는 12바이트, f_list는 8바이트

속도가 발톱만큼 forward_list가 빠르다

그 외는 싱글리스트와 더블링크드 리스트 차이.

Page 40: c++11

초급

초급++

그 외

>> | auto | using | for | nullptr | brace_init | array

move_sementic | Lamda | STL Feature

unique_ptr | tuple | bind

Page 41: c++11

그 외 – unique_ptr

auto_ptr을 대체할 놈

autor_ptr은 deprecation됨.

auto_ptr은 복사 표현으로 통해서 move를 구현.

따라서 generic 알고리즘과 함께 사용핛 수 없다.

generic알고리즘은 실제로 복사를 기준으로 만들어짐.

근데 아직 auto_ptr이나 shared_ptr의 좋은 점을 모르겠음…

Page 42: c++11

그 외 – tuple

std::pair의 일반화

…걍 구조체 써라.

아직은 존재 이유를 모르겠다.

Page 43: c++11

그 외 – bind

bind1st와 bind2nd 일반화 버젼

Page 44: c++11

그 외 – bind

근데… 람다가 있다.

어렵게 bind쓰지 말고 lamda 사용

Page 45: c++11

정리

못 다룬 게 더 많다. 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으로 프로젝트를 업그레이드 해 보아요.

Page 47: c++11

C++11

질문할 게 있으시겠냐만은…