모던 C++ 정리

Hansol Kang
Hansol KangPh.D. Student/Seniror Research Engineer um CNU/Satrec Inititive
Unfamiliar features in C++
ISL Lab Seminar
Hansol Kang
: STL and Modern C++
Contents
2019-07-04
2
Introduction
Modern C++
Summary
Introduction
우리는 얼마나 C/C++를 정확히 이해하고 있는가?
2019-07-04
3
Q. 사용자로부터 배열의 크기를 입력 받아 배열을 선언하고자 한다. 다음 중 바르게 코딩한 것을 고르시오.
Data
Heap
Stack
Introduction
우리는 얼마나 C/C++를 정확히 이해하고 있는가?
2019-07-04
4
“가변 길이 배열(Variable-length array)”
: 배열의 크기를 컴파일 타임에 결정하지 않고, 런타임에 결정함.
VLA는 C99 표준이지만, VC는 이 표준을 따르지 않음.
(GCC, Clang 등 에서는 사용가능.)
오래 전 지식을 알고 있거나 한정된 컴파일러로 새롭게 추가된 feature를
적절히 활용하지 못하고 있음.
“기존에 잘 모르던 feature(STL) + 새롭게 추가된 feature (Modern C++)”
[이번 세미나의 방향성]
Introduction
History of C++
2019-07-04
5
C++11 C++14 C++17
C++98
The C++ Programming
Language 2nd edition
Bjarne Stroustrup
• C++ cast, bool
• Library : string, iostream,
complex
• STL(containers, algorithms,
iterators, function objects)
…
C++03
거기서 거기
• Minor revision
13년 후
<Modern C++>
* History of C++ (https://en.cppreference.com/w/cpp/language/history)
* Modern C++무조건 써야해? (https://tv.naver.com/v/4578722)
C++20/22
• Move semantic
• Unified initializations
• Auto and decltype
• Lambda functions
• Multithreading
• Regular expressions
• Smart pointers
• Hash tables
• std::array
…
Introduction
C++인가??
2019-07-04
6
Modern C++
Data type and Literal
2019-07-04
7
C++ 11
이름 의미
char 하나의 문자나 매우 좁은 범위를 갖는 정수
short 덜 좁은 범위를 갖는 정수
int 보통 범위를 갖는 정수
long 넓은 범위를 갖는 정수
long long 아주 넓은 범위를 갖는 정수
unsigned 위에서 말한 모든 타입의 부호가 없는 버전
signed 위에서 말한 모든 타입의 부호가 있는 버전
float 단정밀도를 갖는 부동소수점
double 배정밀도를 갖는 부동소수점
long double 큰 범위를 갖는 부동소수점
bool 불 방식
C++ 11
• char은 정말 특이한 아키텍처를 제외하면 거의 항상 8비트
• 이외의 크기는 하드웨어와 컴파일러의 구현에 따라 상이함.
g++ vc++
Modern C++
Data type and Literal
2019-07-04
8
리터럴 타입
2 int
2u unsigned
2l long
2ul unsigned long
2.0 double
2.0f float
2.0l long double
042 8진수 (0으로 시작하는 정수)
0x42 16진수 (0x, 0X 접두사)
0b11111101 2진수 (0b, 0B 접두사)
1’231'425'235 가독성 향상 (아포스트로피 ' 활용)
C++ 14
C++ 14
user0520 : !리터럴 왜 써요?
codingbot : 좋으니까 쓰죠!
유용함
애매모호함
정확함
Modern C++
Data type and Literal
2019-07-04
9
리터럴 타입
2 int
2u unsigned
2l long
2ul unsigned long
2.0 double
2.0f float
2.0l long double
042 8진수 (0으로 시작하는 정수)
0x42 16진수 (0x, 0X 접두사)
0b11111101 2진수 (0b, 0B 접두사)
1’231'425'235 가독성 향상 (아포스트로피 ' 활용)
C++ 14
C++ 14
“Apostrophe를 사용하면 가독성이 좋아진다”
Modern C++
Range based for loop
2019-07-04
10
Q. 주어진 배열의 요소를 출력하는 코드를 작성하시오.
C++ 11
표준 컨테이너에서 더 많이 활용됨.
Old style New style
: 간결하며, 안전하다
Modern C++
rvalue reference
2019-07-04
11
 lvalue와 rvalue의 구분
int a = 30;
Left value? Right value?
전통적으로 왼쪽에 놓이는 값, 오른쪽에 놓이는 값으로 구분함.
lvalue : 주소를 가질 수 있는 값
rvalue : 주소를 가질 수 없는 값
Reference는??
int& a = 30;
int& a = b;
int b = 50;
“우리가 일반적으로 알고 있는
reference는 lvalue! ”
 Modern C++에서는 이러한 임시 값을 가질 수 있는
rvalue reference를 지원한다.
Cf. Modern C++에서의 value 구분
C++ 11
Modern C++
rvalue reference
2019-07-04
12
C++ 11
Q. 다음 중 올바른 표현식과 그렇지 않은 표현식을 구분하고, 이유를 설명하시오.
 const 키워드는 rvalue(주소를 변경하지 못하는)를 의미.
 C++11에서 rvalue reference가 추가 되기 전에 많이 사용하던 형식.
Modern C++
Move Semantics(이동 생성자)
2019-07-04
13
C++ 11
 str3 = str1+str2
a b c d e f
str2
return
str1
a b c d e f
operator+
str3
str3
a b c d e f
 복사 생성자를 이용해 return 받은 임시값을 str3로 복사
복사 생성자 X, 이동 생성자 O
* 모두의 코드 (https://modoocode.com/227)
Modern C++
Move Semantics(이동 생성자)
2019-07-04
14
C++ 11
 str3 = str1+str2
* 모두의 코드 (https://modoocode.com/227)
즉, 생성 객체에서 임시 객체를 가리키게 한다.
reference의 개념을 이용하지만, 임시 객체는 rvalue!
이 때 사용하는 것이 rvalue reference
아까 const reference가 rvalue 받는다며 그거 쓰면 안됨?
ㅇㅇ 안됨.
Modern C++
Move Semantics(이동 생성자)
2019-07-04
15
C++ 11
 str3 = str1+str2
다시 정리하면 핵심은 무분별한 deep copy를 방지.
Shallow copy를 활용하여, 효율을 높이고 nullptr로 초기
화하여 다시 접근이 불가능하도록 만듦.
Modern C++
Move Semantics (std::move)
2019-07-04
16
C++ 11
string str1 = “abc”;
string str2 = “def”;
 str1, str2 서로 자리를 바꾸는 함수의 구현을 생각해본다.
* 모두의 코드 (https://modoocode.com/228)
a b c d e f
str1 str2 tmp 총 3번의 copy
tmp str2
a b c a b c
str1 tmp
copy
d e f d e f
str2 str1
copy
a b c a b c
copy
a b c d e f
str1 str2
address1 address2
a b c d e f
str1 str2
address1 address2
Modern C++
Move Semantics (std::move)
2019-07-04
17
C++ 11
 str1, str2 서로 자리를 바꾸는 함수의 구현을 생각해본다.
* 모두의 코드 (https://modoocode.com/228)
a b c d e f
str1 str2
address1 address2
a b c d e f
str1 str2
address1 address2
std::move는 lvalue를 이동가능한 값으로 캐스팅해줌.
절대로 move를 시켜주는 것이 아님.
이동생성자
복사
복사
• Call by value
• Call by reference
• Call by move semantics
(http://blog.naver.com/jidon333/60211056131 )
Modern C++
Move Semantics (성능)
2019-07-04
18
C++ 11
* Modern C++무조건 써야해? (https://tv.naver.com/v/4578722)
Modern C++
Pointer (포인터)
2019-07-04
19
C++ 11
 포인터 초기화에는 반드시 nullptr을 사용하라.
C++ 98
C++ 11
* Item 8 : 0과 NULL 보다 nullptr을 사용하자 (http://bit.ly/2KWj1mX)
“nullptr은 모호성을 줄인다.”
Modern C++
Smart Pointer (스마트 포인터)
2019-07-04
20
C++ 11
원시 포인터(raw pointer)의 사용을 줄여라 표준 컨테이너 or 스마트 포인터는 프로그램의 안전성을 제공함.
“표준 컨테이너 or 스마트 포인터를 사용하라”
1. unique_ptr : 유일한 소유권을 가진 포인터.
2. shared_ptr : 소유권을 공유하는 포인터. (refcount의 증감을 통해 해제함. 소유권을 가지면 증가, 잃으면 감소)
3. weak_ptr : shared_ptr과 유사하나 순환 참조를 막는 포인터.
cf. 기존에 auto_ptr이라고 있었지만, C++11 표준부터는 삭제됨.
* Modern C++무조건 써야해? (https://tv.naver.com/v/4578722), Chromium(http://chromium-cpp.appspot.com/)
(* 이미 다른 언어들(C#, Java,…)에서는 기본적으로 GC를 내장하고 있음.)
메모리를 잘못 관리했을 때의 문제점
1. memory leak, 2. dangling pointer
Modern C++
Smart Pointer (스마트 포인터) - unique_ptr
2019-07-04
21
C++ 11
 유일한 소유권을 가진 포인터
* 모두의 코드 (https://modoocode.com/229)
data에 new Data() 로 생성된 객체의 소유권을 보유한다면,
delete data 만 가능하고, delete data2 는 불가능
복사 X,
소유권 이전 O
a는 f()함수가 사라짐과 동시에 소멸.
사용자가 굳이 delete를 해줄 필요가 없음.
* [C++11] unique_ptr (https://bunhere.tistory.com/407)
Modern C++
Smart Pointer (스마트 포인터) - unique_ptr, make_unique
2019-07-04
22
C++ 11
 유일한 소유권을 가진 포인터
* 모두의 코드 (https://modoocode.com/229)
Modern C++
Lambda expression
2019-07-04
23
C++ 11
[captures](parameters) -> return type {body}
외부 변수들을 캡쳐. &이면 참조, =이면 복사
known known known
???
캡처x, 입력 x, 반환형x, 단순 출력하는 함수
[](){cout<<“hello”<<endl;};
캡처x, 입력 int, 반환형 int, 합 출력하는 함수
[](int a, int b)->int{return a+b;}; [](int a, int b)->int{return a+b;}(5, 4);
[](){cout<<“hello”<<endl;}();
Modern C++
Lambda expression
2019-07-04
24
C++ 11
캡처?? 변수 그냥 인자로 받으면 되는 거 아냐??
“C++의 파워풀한 라이브러리 사용을 위해”
(eg. for_each, fill, transform)
인자를 맞춰줘야 함.
for_each ( InIt first, InIt last, UniOp op);
eg. for_each
첫번째 반복자~마지막 반복자 까지 해당 함수 개체를 수행함.
* 모두의 코드 (https://modoocode.com/196)
Total elements : 64
Modern C++
기타 기능들…
2019-07-04
25
C++ 11
유니폼 초기화 initializer_list static_assert
override auto decltype
constexpr thread mutex
array tuple …
Modern C++
Modern C++ 기능 활용하기
2019-07-04
26
Q. 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다. 세 자리 수를 곱해 만들 수 있는 가
장 큰 대칭수는 얼마입니까?
= 91 × 99
* 문제 출처 : Project Euler
9009
100~999
A B
x = ?
100~999
Modern C++
Modern C++ 기능 활용하기
2019-07-04
27
Q. 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다. 세 자리 수를 곱해 만들 수 있는 가
장 큰 대칭수는 얼마입니까?
= 91 × 99
* 문제 출처 : Project Euler
9009
100~999
A B
x = ?
100~999
C++11의 to_string() 이용
기존에는 itoa ()
Summary
요약
2019-07-04
28
 C++11 이상의 버전을 Modern C++이라고 함.
 Move semantics는 기존의 copy 보다 훨씬 뛰어난 성능을 보임.
 Raw pointe의 사용을 지양하고, 표준 컨테이너(vector, array 등등)을 적극 활용할 것.
 필요에 따라 smart_ptr(unique_ptr)을 활용할 것.
 lambda는 기존의 Functor(Function Object)와 비슷하지만, 작성이 훨씬 유리함.
Summary
Future works
2019-07-04
29
GAN Research
Vanilla GAN
DCGAN
InfoGAN
LSGAN
SRGAN
Development tools & Language
Tips(Document & Programming)
PyTorch
C++ Coding Standard
Modern C++
Mathematical Theory
Linear algebra
Probability & Information theory
Other research
Level Processor
Ice Crack Propagation
Python applications
Python executable & UI
Style Transfer
cGAN
wGAN
BEGAN
BigGAN
Cycle GAN
Style GAN
3D reconstruction
DONE
TO
DO
&
2019-07-04 30
1 von 30

Recomendados

NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기 von
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
4.8K views100 Folien
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012 von
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012Esun Kim
20.9K views98 Folien
Windbg랑 친해지기 von
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기Ji Hun Kim
13.1K views55 Folien
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library von
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard LibraryDongMin Choi
2.4K views82 Folien
[NDC2016] TERA 서버의 Modern C++ 활용기 von
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
6.8K views64 Folien
C++20에서 리플렉션 기능 구현 von
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
1.6K views44 Folien

Más contenido relacionado

Was ist angesagt?

Windows Registered I/O (RIO) vs IOCP von
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
29K views18 Folien
C++20 Key Features Summary von
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features SummaryChris Ohk
9.9K views77 Folien
[0602 박민근] Direct2D von
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D흥배 최
9.5K views133 Folien
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019 von
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
6K views75 Folien
임태현, MMO 서버 개발 포스트 모템, NDC2012 von
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
6.1K views141 Folien
C++17 Key Features Summary - Ver 2 von
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2Chris Ohk
17.6K views83 Folien

Was ist angesagt?(20)

Windows Registered I/O (RIO) vs IOCP von Seungmo Koo
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
Seungmo Koo29K views
C++20 Key Features Summary von Chris Ohk
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
Chris Ohk9.9K views
[0602 박민근] Direct2D von 흥배 최
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
흥배 최9.5K views
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019 von devCAT Studio, NEXON
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
임태현, MMO 서버 개발 포스트 모템, NDC2012 von devCAT Studio, NEXON
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
C++17 Key Features Summary - Ver 2 von Chris Ohk
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
Chris Ohk17.6K views
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화 von Seungmo Koo
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
Seungmo Koo6.7K views
게임서버프로그래밍 #8 - 성능 평가 von Seungmo Koo
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
Seungmo Koo7.6K views
Visual Studio를 이용한 어셈블리어 학습 part 1 von YEONG-CHEON YOU
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
YEONG-CHEON YOU733 views
Ndc14 분산 서버 구축의 ABC von Ho Gyu Lee
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
Ho Gyu Lee3K views
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012 von Esun Kim
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
Esun Kim21.2K views
GCGC- CGCII 서버 엔진에 적용된 기술 (1) von 상현 조
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
상현 조2.2K views
송창규, unity build로 빌드타임 반토막내기, NDC2010 von devCAT Studio, NEXON
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON32.2K views
Iocp 기본 구조 이해 von Nam Hyeonuk
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
Nam Hyeonuk25.1K views
빌드관리 및 디버깅 (2010년 자료) von YEONG-CHEON YOU
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU1.1K views
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance von 상현 조
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
상현 조3.7K views
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016) von Esun Kim
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim8.7K views
Multithread & shared_ptr von 내훈 정
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
내훈 정4.4K views

Similar a 모던 C++ 정리

[C++ Korea 2nd Seminar] C++17 Key Features Summary von
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
10.5K views79 Folien
[C++ Korea] Effective Modern C++ Study item 24-26 von
[C++ Korea] Effective Modern C++ Study item 24-26[C++ Korea] Effective Modern C++ Study item 24-26
[C++ Korea] Effective Modern C++ Study item 24-26Seok-joon Yun
1.8K views40 Folien
[C++ Korea] Effective Modern C++ Study item14 16 +신촌 von
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
2.8K views52 Folien
About Visual C++ 10 von
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
1.5K views92 Folien
Changes in c++0x von
Changes in c++0xChanges in c++0x
Changes in c++0xSang Yeon Jeon
682 views18 Folien
불어오는 변화의 바람, From c++98 to c++11, 14 von
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
161 views54 Folien

Similar a 모던 C++ 정리(20)

[C++ Korea 2nd Seminar] C++17 Key Features Summary von Chris Ohk
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
Chris Ohk10.5K views
[C++ Korea] Effective Modern C++ Study item 24-26 von Seok-joon Yun
[C++ Korea] Effective Modern C++ Study item 24-26[C++ Korea] Effective Modern C++ Study item 24-26
[C++ Korea] Effective Modern C++ Study item 24-26
Seok-joon Yun1.8K views
[C++ Korea] Effective Modern C++ Study item14 16 +신촌 von Seok-joon Yun
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
Seok-joon Yun2.8K views
About Visual C++ 10 von 흥배 최
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
흥배 최1.5K views
불어오는 변화의 바람, From c++98 to c++11, 14 von 명신 김
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
명신 김161 views
초보를 위한 C++11 von Minhyuk Kwon
초보를 위한 C++11초보를 위한 C++11
초보를 위한 C++11
Minhyuk Kwon1.1K views
Modern C++의 타입 추론과 람다, 컨셉 von HyunJoon Park
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
HyunJoon Park205 views
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ... von Seok-joon Yun
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
Seok-joon Yun3K views
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호) von Sang Don Kim
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
Sang Don Kim2.7K views
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기 von Chris Ohk
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
Chris Ohk6.8K views
C++ 11 에 대해서 쉽게 알아봅시다 1부 von Gwangwhi Mah
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부
Gwangwhi Mah3.9K views
Effective c++ item27 von 진화 손
Effective c++ item27Effective c++ item27
Effective c++ item27
진화 손138 views
Boost 라이브리와 C++11 von OnGameServer
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
OnGameServer56.7K views
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료 von SeongTae Jeong
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료
SeongTae Jeong1.6K views
Lambda 란 무엇인가 von Vong Sik Kong
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
Vong Sik Kong6.3K views
C++ 프로그래밍 2014-2018년 기말시험 기출문제 von Lee Sang-Ho
C++ 프로그래밍 2014-2018년 기말시험 기출문제C++ 프로그래밍 2014-2018년 기말시험 기출문제
C++ 프로그래밍 2014-2018년 기말시험 기출문제
Lee Sang-Ho2.5K views
20150212 c++11 features used in crow von Jaeseung Ha
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crow
Jaeseung Ha5.9K views

Más de Hansol Kang

관측 임무스케줄링 (Selecting and scheduling observations of agile satellites) von
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)Hansol Kang
4 views24 Folien
알아두면 쓸모있는 깃허브 2 von
알아두면 쓸모있는 깃허브 2알아두면 쓸모있는 깃허브 2
알아두면 쓸모있는 깃허브 2Hansol Kang
137 views23 Folien
알아두면 쓸모있는 깃허브 1 von
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1Hansol Kang
124 views40 Folien
FPN 리뷰 von
FPN 리뷰FPN 리뷰
FPN 리뷰Hansol Kang
73 views19 Folien
R-FCN 리뷰 von
R-FCN 리뷰R-FCN 리뷰
R-FCN 리뷰Hansol Kang
108 views17 Folien
basic of deep learning von
basic of deep learningbasic of deep learning
basic of deep learningHansol Kang
35 views15 Folien

Más de Hansol Kang(20)

관측 임무스케줄링 (Selecting and scheduling observations of agile satellites) von Hansol Kang
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
Hansol Kang4 views
알아두면 쓸모있는 깃허브 2 von Hansol Kang
알아두면 쓸모있는 깃허브 2알아두면 쓸모있는 깃허브 2
알아두면 쓸모있는 깃허브 2
Hansol Kang137 views
알아두면 쓸모있는 깃허브 1 von Hansol Kang
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1
Hansol Kang124 views
basic of deep learning von Hansol Kang
basic of deep learningbasic of deep learning
basic of deep learning
Hansol Kang35 views
파이썬 제대로 활용하기 von Hansol Kang
파이썬 제대로 활용하기파이썬 제대로 활용하기
파이썬 제대로 활용하기
Hansol Kang77 views
Photo-realistic Single Image Super-resolution using a Generative Adversarial ... von Hansol Kang
Photo-realistic Single Image Super-resolution using a Generative Adversarial ...Photo-realistic Single Image Super-resolution using a Generative Adversarial ...
Photo-realistic Single Image Super-resolution using a Generative Adversarial ...
Hansol Kang1.7K views
LSGAN - SIMPle(Simple Idea Meaningful Performance Level up) von Hansol Kang
LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)
LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)
Hansol Kang565 views
InfoGAN : Interpretable Representation Learning by Information Maximizing Gen... von Hansol Kang
InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...
InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...
Hansol Kang294 views
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet) von Hansol Kang
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
Hansol Kang605 views
PyTorch 튜토리얼 (Touch to PyTorch) von Hansol Kang
PyTorch 튜토리얼 (Touch to PyTorch)PyTorch 튜토리얼 (Touch to PyTorch)
PyTorch 튜토리얼 (Touch to PyTorch)
Hansol Kang1.3K views
Deep Convolutional GANs - meaning of latent space von Hansol Kang
Deep Convolutional GANs - meaning of latent spaceDeep Convolutional GANs - meaning of latent space
Deep Convolutional GANs - meaning of latent space
Hansol Kang657 views
쉽게 설명하는 GAN (What is this? Gum? It's GAN.) von Hansol Kang
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
Hansol Kang478 views
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development) von Hansol Kang
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)
Hansol Kang265 views
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm) von Hansol Kang
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)
Hansol Kang622 views
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법 von Hansol Kang
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법
Hansol Kang205 views
QT 프로그래밍 기초(basic of QT programming tutorial) von Hansol Kang
QT 프로그래밍 기초(basic of QT programming tutorial)QT 프로그래밍 기초(basic of QT programming tutorial)
QT 프로그래밍 기초(basic of QT programming tutorial)
Hansol Kang77 views
Continuously Adaptive Mean Shift(CAMSHIFT) von Hansol Kang
Continuously Adaptive Mean Shift(CAMSHIFT)Continuously Adaptive Mean Shift(CAMSHIFT)
Continuously Adaptive Mean Shift(CAMSHIFT)
Hansol Kang240 views
Mobile Robot PD and DOB control von Hansol Kang
Mobile Robot PD and DOB controlMobile Robot PD and DOB control
Mobile Robot PD and DOB control
Hansol Kang246 views

모던 C++ 정리

  • 1. Unfamiliar features in C++ ISL Lab Seminar Hansol Kang : STL and Modern C++
  • 3. Introduction 우리는 얼마나 C/C++를 정확히 이해하고 있는가? 2019-07-04 3 Q. 사용자로부터 배열의 크기를 입력 받아 배열을 선언하고자 한다. 다음 중 바르게 코딩한 것을 고르시오. Data Heap Stack
  • 4. Introduction 우리는 얼마나 C/C++를 정확히 이해하고 있는가? 2019-07-04 4 “가변 길이 배열(Variable-length array)” : 배열의 크기를 컴파일 타임에 결정하지 않고, 런타임에 결정함. VLA는 C99 표준이지만, VC는 이 표준을 따르지 않음. (GCC, Clang 등 에서는 사용가능.) 오래 전 지식을 알고 있거나 한정된 컴파일러로 새롭게 추가된 feature를 적절히 활용하지 못하고 있음. “기존에 잘 모르던 feature(STL) + 새롭게 추가된 feature (Modern C++)” [이번 세미나의 방향성]
  • 5. Introduction History of C++ 2019-07-04 5 C++11 C++14 C++17 C++98 The C++ Programming Language 2nd edition Bjarne Stroustrup • C++ cast, bool • Library : string, iostream, complex • STL(containers, algorithms, iterators, function objects) … C++03 거기서 거기 • Minor revision 13년 후 <Modern C++> * History of C++ (https://en.cppreference.com/w/cpp/language/history) * Modern C++무조건 써야해? (https://tv.naver.com/v/4578722) C++20/22 • Move semantic • Unified initializations • Auto and decltype • Lambda functions • Multithreading • Regular expressions • Smart pointers • Hash tables • std::array …
  • 7. Modern C++ Data type and Literal 2019-07-04 7 C++ 11 이름 의미 char 하나의 문자나 매우 좁은 범위를 갖는 정수 short 덜 좁은 범위를 갖는 정수 int 보통 범위를 갖는 정수 long 넓은 범위를 갖는 정수 long long 아주 넓은 범위를 갖는 정수 unsigned 위에서 말한 모든 타입의 부호가 없는 버전 signed 위에서 말한 모든 타입의 부호가 있는 버전 float 단정밀도를 갖는 부동소수점 double 배정밀도를 갖는 부동소수점 long double 큰 범위를 갖는 부동소수점 bool 불 방식 C++ 11 • char은 정말 특이한 아키텍처를 제외하면 거의 항상 8비트 • 이외의 크기는 하드웨어와 컴파일러의 구현에 따라 상이함. g++ vc++
  • 8. Modern C++ Data type and Literal 2019-07-04 8 리터럴 타입 2 int 2u unsigned 2l long 2ul unsigned long 2.0 double 2.0f float 2.0l long double 042 8진수 (0으로 시작하는 정수) 0x42 16진수 (0x, 0X 접두사) 0b11111101 2진수 (0b, 0B 접두사) 1’231'425'235 가독성 향상 (아포스트로피 ' 활용) C++ 14 C++ 14 user0520 : !리터럴 왜 써요? codingbot : 좋으니까 쓰죠! 유용함 애매모호함 정확함
  • 9. Modern C++ Data type and Literal 2019-07-04 9 리터럴 타입 2 int 2u unsigned 2l long 2ul unsigned long 2.0 double 2.0f float 2.0l long double 042 8진수 (0으로 시작하는 정수) 0x42 16진수 (0x, 0X 접두사) 0b11111101 2진수 (0b, 0B 접두사) 1’231'425'235 가독성 향상 (아포스트로피 ' 활용) C++ 14 C++ 14 “Apostrophe를 사용하면 가독성이 좋아진다”
  • 10. Modern C++ Range based for loop 2019-07-04 10 Q. 주어진 배열의 요소를 출력하는 코드를 작성하시오. C++ 11 표준 컨테이너에서 더 많이 활용됨. Old style New style : 간결하며, 안전하다
  • 11. Modern C++ rvalue reference 2019-07-04 11  lvalue와 rvalue의 구분 int a = 30; Left value? Right value? 전통적으로 왼쪽에 놓이는 값, 오른쪽에 놓이는 값으로 구분함. lvalue : 주소를 가질 수 있는 값 rvalue : 주소를 가질 수 없는 값 Reference는?? int& a = 30; int& a = b; int b = 50; “우리가 일반적으로 알고 있는 reference는 lvalue! ”  Modern C++에서는 이러한 임시 값을 가질 수 있는 rvalue reference를 지원한다. Cf. Modern C++에서의 value 구분 C++ 11
  • 12. Modern C++ rvalue reference 2019-07-04 12 C++ 11 Q. 다음 중 올바른 표현식과 그렇지 않은 표현식을 구분하고, 이유를 설명하시오.  const 키워드는 rvalue(주소를 변경하지 못하는)를 의미.  C++11에서 rvalue reference가 추가 되기 전에 많이 사용하던 형식.
  • 13. Modern C++ Move Semantics(이동 생성자) 2019-07-04 13 C++ 11  str3 = str1+str2 a b c d e f str2 return str1 a b c d e f operator+ str3 str3 a b c d e f  복사 생성자를 이용해 return 받은 임시값을 str3로 복사 복사 생성자 X, 이동 생성자 O * 모두의 코드 (https://modoocode.com/227)
  • 14. Modern C++ Move Semantics(이동 생성자) 2019-07-04 14 C++ 11  str3 = str1+str2 * 모두의 코드 (https://modoocode.com/227) 즉, 생성 객체에서 임시 객체를 가리키게 한다. reference의 개념을 이용하지만, 임시 객체는 rvalue! 이 때 사용하는 것이 rvalue reference 아까 const reference가 rvalue 받는다며 그거 쓰면 안됨? ㅇㅇ 안됨.
  • 15. Modern C++ Move Semantics(이동 생성자) 2019-07-04 15 C++ 11  str3 = str1+str2 다시 정리하면 핵심은 무분별한 deep copy를 방지. Shallow copy를 활용하여, 효율을 높이고 nullptr로 초기 화하여 다시 접근이 불가능하도록 만듦.
  • 16. Modern C++ Move Semantics (std::move) 2019-07-04 16 C++ 11 string str1 = “abc”; string str2 = “def”;  str1, str2 서로 자리를 바꾸는 함수의 구현을 생각해본다. * 모두의 코드 (https://modoocode.com/228) a b c d e f str1 str2 tmp 총 3번의 copy tmp str2 a b c a b c str1 tmp copy d e f d e f str2 str1 copy a b c a b c copy a b c d e f str1 str2 address1 address2 a b c d e f str1 str2 address1 address2
  • 17. Modern C++ Move Semantics (std::move) 2019-07-04 17 C++ 11  str1, str2 서로 자리를 바꾸는 함수의 구현을 생각해본다. * 모두의 코드 (https://modoocode.com/228) a b c d e f str1 str2 address1 address2 a b c d e f str1 str2 address1 address2 std::move는 lvalue를 이동가능한 값으로 캐스팅해줌. 절대로 move를 시켜주는 것이 아님. 이동생성자 복사 복사 • Call by value • Call by reference • Call by move semantics (http://blog.naver.com/jidon333/60211056131 )
  • 18. Modern C++ Move Semantics (성능) 2019-07-04 18 C++ 11 * Modern C++무조건 써야해? (https://tv.naver.com/v/4578722)
  • 19. Modern C++ Pointer (포인터) 2019-07-04 19 C++ 11  포인터 초기화에는 반드시 nullptr을 사용하라. C++ 98 C++ 11 * Item 8 : 0과 NULL 보다 nullptr을 사용하자 (http://bit.ly/2KWj1mX) “nullptr은 모호성을 줄인다.”
  • 20. Modern C++ Smart Pointer (스마트 포인터) 2019-07-04 20 C++ 11 원시 포인터(raw pointer)의 사용을 줄여라 표준 컨테이너 or 스마트 포인터는 프로그램의 안전성을 제공함. “표준 컨테이너 or 스마트 포인터를 사용하라” 1. unique_ptr : 유일한 소유권을 가진 포인터. 2. shared_ptr : 소유권을 공유하는 포인터. (refcount의 증감을 통해 해제함. 소유권을 가지면 증가, 잃으면 감소) 3. weak_ptr : shared_ptr과 유사하나 순환 참조를 막는 포인터. cf. 기존에 auto_ptr이라고 있었지만, C++11 표준부터는 삭제됨. * Modern C++무조건 써야해? (https://tv.naver.com/v/4578722), Chromium(http://chromium-cpp.appspot.com/) (* 이미 다른 언어들(C#, Java,…)에서는 기본적으로 GC를 내장하고 있음.) 메모리를 잘못 관리했을 때의 문제점 1. memory leak, 2. dangling pointer
  • 21. Modern C++ Smart Pointer (스마트 포인터) - unique_ptr 2019-07-04 21 C++ 11  유일한 소유권을 가진 포인터 * 모두의 코드 (https://modoocode.com/229) data에 new Data() 로 생성된 객체의 소유권을 보유한다면, delete data 만 가능하고, delete data2 는 불가능 복사 X, 소유권 이전 O a는 f()함수가 사라짐과 동시에 소멸. 사용자가 굳이 delete를 해줄 필요가 없음. * [C++11] unique_ptr (https://bunhere.tistory.com/407)
  • 22. Modern C++ Smart Pointer (스마트 포인터) - unique_ptr, make_unique 2019-07-04 22 C++ 11  유일한 소유권을 가진 포인터 * 모두의 코드 (https://modoocode.com/229)
  • 23. Modern C++ Lambda expression 2019-07-04 23 C++ 11 [captures](parameters) -> return type {body} 외부 변수들을 캡쳐. &이면 참조, =이면 복사 known known known ??? 캡처x, 입력 x, 반환형x, 단순 출력하는 함수 [](){cout<<“hello”<<endl;}; 캡처x, 입력 int, 반환형 int, 합 출력하는 함수 [](int a, int b)->int{return a+b;}; [](int a, int b)->int{return a+b;}(5, 4); [](){cout<<“hello”<<endl;}();
  • 24. Modern C++ Lambda expression 2019-07-04 24 C++ 11 캡처?? 변수 그냥 인자로 받으면 되는 거 아냐?? “C++의 파워풀한 라이브러리 사용을 위해” (eg. for_each, fill, transform) 인자를 맞춰줘야 함. for_each ( InIt first, InIt last, UniOp op); eg. for_each 첫번째 반복자~마지막 반복자 까지 해당 함수 개체를 수행함. * 모두의 코드 (https://modoocode.com/196) Total elements : 64
  • 25. Modern C++ 기타 기능들… 2019-07-04 25 C++ 11 유니폼 초기화 initializer_list static_assert override auto decltype constexpr thread mutex array tuple …
  • 26. Modern C++ Modern C++ 기능 활용하기 2019-07-04 26 Q. 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다. 세 자리 수를 곱해 만들 수 있는 가 장 큰 대칭수는 얼마입니까? = 91 × 99 * 문제 출처 : Project Euler 9009 100~999 A B x = ? 100~999
  • 27. Modern C++ Modern C++ 기능 활용하기 2019-07-04 27 Q. 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다. 세 자리 수를 곱해 만들 수 있는 가 장 큰 대칭수는 얼마입니까? = 91 × 99 * 문제 출처 : Project Euler 9009 100~999 A B x = ? 100~999 C++11의 to_string() 이용 기존에는 itoa ()
  • 28. Summary 요약 2019-07-04 28  C++11 이상의 버전을 Modern C++이라고 함.  Move semantics는 기존의 copy 보다 훨씬 뛰어난 성능을 보임.  Raw pointe의 사용을 지양하고, 표준 컨테이너(vector, array 등등)을 적극 활용할 것.  필요에 따라 smart_ptr(unique_ptr)을 활용할 것.  lambda는 기존의 Functor(Function Object)와 비슷하지만, 작성이 훨씬 유리함.
  • 29. Summary Future works 2019-07-04 29 GAN Research Vanilla GAN DCGAN InfoGAN LSGAN SRGAN Development tools & Language Tips(Document & Programming) PyTorch C++ Coding Standard Modern C++ Mathematical Theory Linear algebra Probability & Information theory Other research Level Processor Ice Crack Propagation Python applications Python executable & UI Style Transfer cGAN wGAN BEGAN BigGAN Cycle GAN Style GAN 3D reconstruction DONE TO DO