SlideShare a Scribd company logo
1 of 30
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

More Related Content

What's hot

ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features SummaryChris Ohk
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!amusementcreators
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013Esun Kim
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들영욱 오
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍Seungmo Koo
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현MinGeun Park
 
[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 Library
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard LibraryDongMin Choi
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 

What's hot (20)

ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
 
[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 Library
[C++ Korea 2nd Seminar] Ranges for The Cpp Standard Library
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 

Similar to 모던 C++ 정리

[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
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
 
[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
[C++ Korea] Effective Modern C++ Study item 24-26Seok-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 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
초보를 위한 C++11
초보를 위한 C++11초보를 위한 C++11
초보를 위한 C++11Minhyuk Kwon
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉HyunJoon Park
 
[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 ...
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...Seok-joon Yun
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부Gwangwhi Mah
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2Jinkyoung Kim
 
Effective c++ item27
Effective c++ item27Effective c++ item27
Effective c++ item27진화 손
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료SeongTae Jeong
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
C++ 프로그래밍 2014-2018년 기말시험 기출문제
C++ 프로그래밍 2014-2018년 기말시험 기출문제C++ 프로그래밍 2014-2018년 기말시험 기출문제
C++ 프로그래밍 2014-2018년 기말시험 기출문제Lee Sang-Ho
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 

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

[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
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
[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
[C++ Korea] Effective Modern C++ Study item 24-26
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
Changes in c++0x
Changes in c++0xChanges in c++0x
Changes in c++0x
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
초보를 위한 C++11
초보를 위한 C++11초보를 위한 C++11
초보를 위한 C++11
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
 
[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 ...
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
 
Effective c++ item27
Effective c++ item27Effective c++ item27
Effective c++ item27
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료
Tech-days 미니 토요세미나 - 3회 C#편 PPT 자료
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
C++ 프로그래밍 2014-2018년 기말시험 기출문제
C++ 프로그래밍 2014-2018년 기말시험 기출문제C++ 프로그래밍 2014-2018년 기말시험 기출문제
C++ 프로그래밍 2014-2018년 기말시험 기출문제
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 

More from Hansol Kang

ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )
ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )
ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )Hansol Kang
 
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)Hansol Kang
 
알아두면 쓸모있는 깃허브 2
알아두면 쓸모있는 깃허브 2알아두면 쓸모있는 깃허브 2
알아두면 쓸모있는 깃허브 2Hansol Kang
 
알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1Hansol Kang
 
basic of deep learning
basic of deep learningbasic of deep learning
basic of deep learningHansol Kang
 
파이썬 제대로 활용하기
파이썬 제대로 활용하기파이썬 제대로 활용하기
파이썬 제대로 활용하기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 ...
Photo-realistic Single Image Super-resolution using a Generative Adversarial ...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)
LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)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...
InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...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)
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)Hansol Kang
 
PyTorch 튜토리얼 (Touch to PyTorch)
PyTorch 튜토리얼 (Touch to PyTorch)PyTorch 튜토리얼 (Touch to PyTorch)
PyTorch 튜토리얼 (Touch to PyTorch)Hansol Kang
 
Deep Convolutional GANs - meaning of latent space
Deep Convolutional GANs - meaning of latent spaceDeep Convolutional GANs - meaning of latent space
Deep Convolutional GANs - meaning of latent spaceHansol 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.)
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)Hansol Kang
 
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)Hansol Kang
 
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)Hansol Kang
 
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법Hansol Kang
 
QT 프로그래밍 기초(basic of QT programming tutorial)
QT 프로그래밍 기초(basic of QT programming tutorial)QT 프로그래밍 기초(basic of QT programming tutorial)
QT 프로그래밍 기초(basic of QT programming tutorial)Hansol Kang
 
Continuously Adaptive Mean Shift(CAMSHIFT)
Continuously Adaptive Mean Shift(CAMSHIFT)Continuously Adaptive Mean Shift(CAMSHIFT)
Continuously Adaptive Mean Shift(CAMSHIFT)Hansol Kang
 

More from Hansol Kang (20)

ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )
ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )
ROS 시작하기(Getting Started with ROS:: Your First Steps in Robot Programming )
 
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
관측 임무스케줄링 (Selecting and scheduling observations of agile satellites)
 
알아두면 쓸모있는 깃허브 2
알아두면 쓸모있는 깃허브 2알아두면 쓸모있는 깃허브 2
알아두면 쓸모있는 깃허브 2
 
알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1
 
FPN 리뷰
FPN 리뷰FPN 리뷰
FPN 리뷰
 
R-FCN 리뷰
R-FCN 리뷰R-FCN 리뷰
R-FCN 리뷰
 
basic of deep learning
basic of deep learningbasic of deep learning
basic of deep learning
 
파이썬 제대로 활용하기
파이썬 제대로 활용하기파이썬 제대로 활용하기
파이썬 제대로 활용하기
 
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 ...
Photo-realistic Single Image Super-resolution using a Generative Adversarial ...
 
LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)
LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)
LSGAN - SIMPle(Simple Idea Meaningful Performance Level up)
 
InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...
InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...
InfoGAN : Interpretable Representation Learning by Information Maximizing Gen...
 
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
 
PyTorch 튜토리얼 (Touch to PyTorch)
PyTorch 튜토리얼 (Touch to PyTorch)PyTorch 튜토리얼 (Touch to PyTorch)
PyTorch 튜토리얼 (Touch to PyTorch)
 
Deep Convolutional GANs - meaning of latent space
Deep Convolutional GANs - meaning of latent spaceDeep Convolutional GANs - meaning of latent space
Deep Convolutional GANs - meaning of latent space
 
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
 
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)
문서와 개발에 필요한 간단한 팁들(Too easy, but important things - document, development)
 
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)
신뢰 전파 기법을 이용한 스테레오 정합(Stereo matching using belief propagation algorithm)
 
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법
HSV 컬러 공간에서의 레티넥스와 채도 보정을 이용한 화질 개선 기법
 
QT 프로그래밍 기초(basic of QT programming tutorial)
QT 프로그래밍 기초(basic of QT programming tutorial)QT 프로그래밍 기초(basic of QT programming tutorial)
QT 프로그래밍 기초(basic of QT programming tutorial)
 
Continuously Adaptive Mean Shift(CAMSHIFT)
Continuously Adaptive Mean Shift(CAMSHIFT)Continuously Adaptive Mean Shift(CAMSHIFT)
Continuously Adaptive Mean Shift(CAMSHIFT)
 

모던 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