2. 발표자
• 최재원
• 아주대학교 컴공, 수학 전공
• (주)펜타큐브 인턴
• 관심 분야:
• System software
• Big data infrastructure
• GPGPU
2016. 6. 7. 2016 C++ study 2
3. Previously…
• C++은 시스템 소프트웨어 제작, 고성능 분야에
주로 쓰인다.
• 다양한 프로그래밍 스타일을 포함한 언어.
• C++ best practices: 최대한 컴파일 할 때 문제를
드러내게 하라.
4. Previously…
• 우리 C++ 스터디의 1차 목표를 정함
• A Tours of C++ (TC++PL chapter 2 ~ chapter 5) 읽기
• 다 읽으면서, 진도에 방해되지 않는 선에서 추가적인
발표를 한다.
• E.g. C compatibility issues
5. NOTICE
• 본 슬라이드는 C++ code들을 포함하고 있습니다.
• 모든 codes는 Mac OS X El Capitan ver. 10.11.5에서 g++
(Homebrew gcc 6.1.0) 6.1.0 를 통해 컴파일 되고 실행
되었음.
• 본 슬라이드는 극미량의 assembly code를
포함하고 있습니다.
• 무서우신 분들은 방의 불을 활짝 켜시고 보시길...
7. A Tour of C++: The Basics
• Informal introduction to C++
• 모든 것을 이해할 필요도 없고, 이해하는 것을
기대하지 않는다.
• 다만, 재밌어 보인 것, 궁금한 것, 어려운 것들을
보기 위한 조감도를 그리기 위함.
• C++ 11을 기준으로 진행될 예정
• 가끔 14도 다룰 예정.
• 참고) gcc 6.1 부터는 default 가 C++ 14.
• 시대에 뒤떨어 지고 있는 우리…
8. A Tour of C++: The Basics
• “Procedural programming”
• 어떤 자료구조를 만들고, 어떤 알고리즘을
만들지를 고민하는 프로그래밍 스타일
• C를 했다는 가정을 하므로, 쉽게 쉽게 언급하고
넘어가자.
9. The “Basics”
• C++ is a compiled language
• Interpreter vs Compiler
• Portability: 사실상 portable한 몇 안되는 언어 중 하나
• Statically typed language
• Type이란?
• 어떤 형식으로 데이터를 저장할 지 결정하는 것
• 해당 자료에 가할 수 있는 연산의 종류를 정의하는 것
• Statically typed language에서는 컴파일러가 변수의
사용법을 안다.
16. Pointers, Arrays, and Loops(for)
• Pointer
• Pointer vs Reference
• NULL(or number 0) vs nullptr
• Nullptr eliminates potnetial confusion between integers and
pointers
• New, delete operators
• Double deletion
• Undefined behavior
• Don’t use “naked’ new and delete operator
• Use std::unique_ptr, std::shared_ptr
21. User-Defined Types
• Class
• The representation과 the operations 을 더 긴밀하게
이어주기 위해 사용
• 사실 Class 와 struct는 기본 제한자(private이냐,
public이냐) 외엔 차이가 없음
• 더 자세한 내용은 다음 tour에서…
24. User-Defined Types
• Enumeration
• Enum class
• “class”: Strongly typed and that its enumerators are scoped.
• Explicit conversion이나enum name을 드러내고 싶지 않다면
기존의 plain enum을 써도 됨.
• 기본적으로 Assignment, initialization, and comparisions( ==
or <= ) 가 정의되어 있음
28. Error handling
• Static asserts
• Why use asserts
• 개발 중 “당연히 ~해야 하는 것” 을 정의하고 넘어가는 작업
• 해당 scope에서 그 assert 이후는 assert로 걸러낸 작업을
믿고 코딩할 수 있다.
• 많은 문서에서 assert를 쓰는 것은 자유롭게 허락하고 있다.
• 어떻게 보면 assert는 문서화 기법이라고 볼 수도 있다.
assertion만 보고도 이 코드의 목적을 알게 할 수도 있기
때문이다.
• 많은 경우 Debug에서만 assert가 돌게 하므로, 디버그 때
assert로 검증을 하고 runtime에선 exception을 날리는
식으로 코딩한다.
• 적극 추천!
29. Error handling
• Static asserts
• Why static asserts
• 이러한 assert 작업을 컴파일 타임에 하는 방법
• 상수 범위 체크에 쓸 수 있다.
• 상수를 현재 scope에 다시 정의하고, 이전에 정의한
상수들과 관계로 정의하는 상황이 있는데 그때 제일 좋다.
• constexpr를 써놓은 function을 체크할 수 있다.
• 사실 별 쓸모 없어 보인다
30. Error handling
• Design by contracts
• assert를 통해 설계가 확실한지를 점검하는 코드를 넣
는 기법
• getter, setter 에 validation 하는 코드를 넣는 practices
가 바로 써먹어 볼 수 있는 것.
• 이를 단순한 if문에 exceptions 도 넣지만 assertion을
넣으면 버그를 잡기 쉽다.
• https://en.wikipedia.org/wiki/Design_by_contract