SlideShare a Scribd company logo
1 of 31
A Tour of C++
: The Basics
C++ 스터디 2주차
발표자
• 최재원
• 아주대학교 컴공, 수학 전공
• (주)펜타큐브 인턴
• 관심 분야:
• System software
• Big data infrastructure
• GPGPU
2016. 6. 7. 2016 C++ study 2
Previously…
• C++은 시스템 소프트웨어 제작, 고성능 분야에
주로 쓰인다.
• 다양한 프로그래밍 스타일을 포함한 언어.
• C++ best practices: 최대한 컴파일 할 때 문제를
드러내게 하라.
Previously…
• 우리 C++ 스터디의 1차 목표를 정함
• A Tours of C++ (TC++PL chapter 2 ~ chapter 5) 읽기
• 다 읽으면서, 진도에 방해되지 않는 선에서 추가적인
발표를 한다.
• E.g. C compatibility issues
NOTICE
• 본 슬라이드는 C++ code들을 포함하고 있습니다.
• 모든 codes는 Mac OS X El Capitan ver. 10.11.5에서 g++
(Homebrew gcc 6.1.0) 6.1.0 를 통해 컴파일 되고 실행
되었음.
• 본 슬라이드는 극미량의 assembly code를
포함하고 있습니다.
• 무서우신 분들은 방의 불을 활짝 켜시고 보시길...
A Tour of C++: The Basics
A Tour of C++: The Basics
• Informal introduction to C++
• 모든 것을 이해할 필요도 없고, 이해하는 것을
기대하지 않는다.
• 다만, 재밌어 보인 것, 궁금한 것, 어려운 것들을
보기 위한 조감도를 그리기 위함.
• C++ 11을 기준으로 진행될 예정
• 가끔 14도 다룰 예정.
• 참고) gcc 6.1 부터는 default 가 C++ 14.
• 시대에 뒤떨어 지고 있는 우리…
A Tour of C++: The Basics
• “Procedural programming”
• 어떤 자료구조를 만들고, 어떤 알고리즘을
만들지를 고민하는 프로그래밍 스타일
• C를 했다는 가정을 하므로, 쉽게 쉽게 언급하고
넘어가자.
The “Basics”
• C++ is a compiled language
• Interpreter vs Compiler
• Portability: 사실상 portable한 몇 안되는 언어 중 하나
• Statically typed language
• Type이란?
• 어떤 형식으로 데이터를 저장할 지 결정하는 것
• 해당 자료에 가할 수 있는 연산의 종류를 정의하는 것
• Statically typed language에서는 컴파일러가 변수의
사용법을 안다.
The minimal C++ program
• Main: entry point.
The minimal C++ program
• Return “int value” of main:
• Non-zero return values indicate failure to system.
Hello world program
• Namespace?
• Cout?
• Operator overloading?
Types, Variables, and Arithmetics
• Type
• Variable
• Arithmetic
Contants
• Const
• Constexpr
• Assembly를 보자
• Template meta programming에서 강력하게 작동
• Compile time에 모든걸 계산
• Optimization을 걸면 constexpr 이든 뭐든 똑같이 작동함.
• Inlining vs constexpr
• Inlining: removes function calls
• Constexpr: evaluates in compile times
• http://stackoverflow.com/questions/7113872/inline-vs-
constexpr
Tests and Loops
• If, else if, switch
• While
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
Pointers, Arrays, and Loops(for)
• Arrays
• For
• Naïve for
Pointers, Arrays, and Loops(for)
• Arrays
• For
• Ranged for
*이런 식으로 하면 복사가 발생하면서 i의 생성자가 호출되게 된다.
Pointers, Arrays, and Loops(for)
• Arrays
• For
• Ranged for
User-Defined Types
• Struct
• C에서 다형성을 구현한다면?
• Alignment requirements
User-Defined Types
• Class
• The representation과 the operations 을 더 긴밀하게
이어주기 위해 사용
• 사실 Class 와 struct는 기본 제한자(private이냐,
public이냐) 외엔 차이가 없음
• 더 자세한 내용은 다음 tour에서…
User-Defined Types
• Class
• Constructor
• 클래스의 이름과 같은 함수.
생성 시에 호출되는 것이
보장된다.
• 참고: std::initializer_list
User-Defined Types
• Enumeration
• Enum class
• Enum 이름 지을 때 겹치지 않게 하기 위해 했던 여러 짓을
안해도 됨.
• 현재는 아래와 같이.
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 <= ) 가 정의되어 있음
Modularity
• “Declarations” vs “Definitions"
• Separate Compilation
• Namespaces
• ::printf my_namespace::printf
Modularity
• “Declarations” vs “Definitions"
• Separate Compilation
• Namespaces
• ::printf my_namespace::printf
Error handling
• Exceptions
• Invariants
• (Class) invariant: What is assumed to be true
Error handling
• Static asserts
• Why use asserts
• 개발 중 “당연히 ~해야 하는 것” 을 정의하고 넘어가는 작업
• 해당 scope에서 그 assert 이후는 assert로 걸러낸 작업을
믿고 코딩할 수 있다.
• 많은 문서에서 assert를 쓰는 것은 자유롭게 허락하고 있다.
• 어떻게 보면 assert는 문서화 기법이라고 볼 수도 있다.
assertion만 보고도 이 코드의 목적을 알게 할 수도 있기
때문이다.
• 많은 경우 Debug에서만 assert가 돌게 하므로, 디버그 때
assert로 검증을 하고 runtime에선 exception을 날리는
식으로 코딩한다.
• 적극 추천!
Error handling
• Static asserts
• Why static asserts
• 이러한 assert 작업을 컴파일 타임에 하는 방법
• 상수 범위 체크에 쓸 수 있다.
• 상수를 현재 scope에 다시 정의하고, 이전에 정의한
상수들과 관계로 정의하는 상황이 있는데 그때 제일 좋다.
• constexpr를 써놓은 function을 체크할 수 있다.
• 사실 별 쓸모 없어 보인다
Error handling
• Design by contracts
• assert를 통해 설계가 확실한지를 점검하는 코드를 넣
는 기법
• getter, setter 에 validation 하는 코드를 넣는 practices
가 바로 써먹어 볼 수 있는 것.
• 이를 단순한 if문에 exceptions 도 넣지만 assertion을
넣으면 버그를 잡기 쉽다.
• https://en.wikipedia.org/wiki/Design_by_contract
References
• TC++PL
• https://github.com/isocpp/CppCoreGuidelines/blo
b/master/CppCoreGuidelines.md
• En.cppreference.com

More Related Content

What's hot

[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)MinGeun Park
 
초보를 위한 C++11
초보를 위한 C++11초보를 위한 C++11
초보를 위한 C++11Minhyuk Kwon
 
Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)Lusain Kim
 
C++api디자인 1장
C++api디자인 1장C++api디자인 1장
C++api디자인 1장Jihoon Park
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Joonsung Lee
 
2016 C++스터디 1주차
2016 C++스터디 1주차2016 C++스터디 1주차
2016 C++스터디 1주차Seungwee  Choi
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장Ji Hun Kim
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1kim HYUNG JIN
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동선협 이
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaDexter Jung
 
API.Design.for.CPlusPlus.Ch5
API.Design.for.CPlusPlus.Ch5API.Design.for.CPlusPlus.Ch5
API.Design.for.CPlusPlus.Ch5박 민규
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingDong Chan Shin
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션cpt mobilex
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 
141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍Changwon Choe
 
[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)NAVER D2
 

What's hot (20)

[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
초보를 위한 C++11
초보를 위한 C++11초보를 위한 C++11
초보를 위한 C++11
 
Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)Visual studio 사용 설명서(고급)
Visual studio 사용 설명서(고급)
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
C++api디자인 1장
C++api디자인 1장C++api디자인 1장
C++api디자인 1장
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기
 
2016 C++스터디 1주차
2016 C++스터디 1주차2016 C++스터디 1주차
2016 C++스터디 1주차
 
llvm 소개
llvm 소개llvm 소개
llvm 소개
 
Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With Java
 
API.Design.for.CPlusPlus.Ch5
API.Design.for.CPlusPlus.Ch5API.Design.for.CPlusPlus.Ch5
API.Design.for.CPlusPlus.Ch5
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
 
Llvm
LlvmLlvm
Llvm
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍
 
[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)
 

Similar to A tour of C++ : the basics

C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차HyunJoon Park
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1연우 김
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4문익 장
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들DongMin Choi
 
Intro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, OperatorIntro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, OperatorJeongbae Oh
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++Min-soo Park
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기SanghoYun
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼Kenu, GwangNam Heo
 
분석과 설계
분석과 설계분석과 설계
분석과 설계Haeil Yi
 

Similar to A tour of C++ : the basics (20)

C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
 
Intro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, OperatorIntro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, Operator
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
 
분석과 설계
분석과 설계분석과 설계
분석과 설계
 

A tour of C++ : the basics

  • 1. A Tour of C++ : The Basics C++ 스터디 2주차
  • 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를 포함하고 있습니다. • 무서우신 분들은 방의 불을 활짝 켜시고 보시길...
  • 6. A Tour of C++: The Basics
  • 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에서는 컴파일러가 변수의 사용법을 안다.
  • 10. The minimal C++ program • Main: entry point.
  • 11. The minimal C++ program • Return “int value” of main: • Non-zero return values indicate failure to system.
  • 12. Hello world program • Namespace? • Cout? • Operator overloading?
  • 13. Types, Variables, and Arithmetics • Type • Variable • Arithmetic
  • 14. Contants • Const • Constexpr • Assembly를 보자 • Template meta programming에서 강력하게 작동 • Compile time에 모든걸 계산 • Optimization을 걸면 constexpr 이든 뭐든 똑같이 작동함. • Inlining vs constexpr • Inlining: removes function calls • Constexpr: evaluates in compile times • http://stackoverflow.com/questions/7113872/inline-vs- constexpr
  • 15. Tests and Loops • If, else if, switch • While
  • 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
  • 17. Pointers, Arrays, and Loops(for) • Arrays • For • Naïve for
  • 18. Pointers, Arrays, and Loops(for) • Arrays • For • Ranged for *이런 식으로 하면 복사가 발생하면서 i의 생성자가 호출되게 된다.
  • 19. Pointers, Arrays, and Loops(for) • Arrays • For • Ranged for
  • 20. User-Defined Types • Struct • C에서 다형성을 구현한다면? • Alignment requirements
  • 21. User-Defined Types • Class • The representation과 the operations 을 더 긴밀하게 이어주기 위해 사용 • 사실 Class 와 struct는 기본 제한자(private이냐, public이냐) 외엔 차이가 없음 • 더 자세한 내용은 다음 tour에서…
  • 22. User-Defined Types • Class • Constructor • 클래스의 이름과 같은 함수. 생성 시에 호출되는 것이 보장된다. • 참고: std::initializer_list
  • 23. User-Defined Types • Enumeration • Enum class • Enum 이름 지을 때 겹치지 않게 하기 위해 했던 여러 짓을 안해도 됨. • 현재는 아래와 같이.
  • 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 <= ) 가 정의되어 있음
  • 25. Modularity • “Declarations” vs “Definitions" • Separate Compilation • Namespaces • ::printf my_namespace::printf
  • 26. Modularity • “Declarations” vs “Definitions" • Separate Compilation • Namespaces • ::printf my_namespace::printf
  • 27. Error handling • Exceptions • Invariants • (Class) invariant: What is assumed to be true
  • 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