SlideShare a Scribd company logo
1 of 43
WHAT’S NEW IN C++11
Blue Wind
백정상
C++11
C++0x 로 알려짐
2011년 8월에 표준으로 선정
CONTENTS
퍼포먼스 향상
언어 사용성 강화
언어 기능 강화
c++ standard libraries 변경
불필요한 복사/생성 방지

퍼포먼스 향상
R-VALUE REFERENCES
l-value
수식의 왼쪽에 있는 값
일반적으로 대입되는 값
r-value
수식의 오른쪽에 있는 값
일반적으로 대입하는 값
r-value reference
말 그래도 r-value의 레퍼런스
왜 필요한가
l-value reference는 익숙히 사용하고 있었다
큰 데이터를 패러미터로 넘길 때 포인터보다 좀 더 안전하게 레퍼런스를 이용
그럼 큰 데이터를 반환해야 할 때엔?
기존에는 컴파일러에서 최적화 해주는 수준으로 커버
C++11은 move semantic을 도입
의미 없는 복사 / 생성을 최적화
이를 위해서 반환해야 할 값의 레퍼런스(r-value reference)가 필요하다
예제
std::vector<int> MakeVector() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
return vec;
}

std::vector<int> vec2 = MakeVector();
기존의 벡터 복사 생성자

vec
카피
vec2
새로 할당 된 메모리
R-VALUE REF를 이용해 반환하는 과정

vec

vec3

null
R-VALUE REF를 이용해 반환하는 과정

vec

vec3

null
이를 위해서
C++11은 이를 위해 두 가지 방식의 생성자를 지원
copy constructor
vector::vector(const vector<T>&v)
move constructor
vector::vector(vector<T>&& v)
대입 연산자도 비슷하게 두 가지를 지원
변수에서 R-VALUE를 얻어야 할 때
std::move()를 사용해서 r-value를 전달

class A {
A(A&& a) {
this->s = std::move(a.s);
}
private:
HugeBigObj s;
}
GENERALIZED CONSTANT EXPRESSIONS
기존에는 상수 연산이 없고 상수만 사용할 수 있었음
코드 내에 잦은 상수연산은 컴파일러 퍼포먼스를 저하시켰음
C++11에는 상수 연산 키워드가 추가

int get_five() {return 5;}
int some_value[get_five() + 7]; // 컴파일 에러

constexpr int get_five() {return 5;}
int some_value[get_five() + 7]; // 12개의 정수 배열이 만들어짐
INITIALIZER LIST
POD나 스탠다드 컨테이너의 초기 변수를 리스트 형태로 전달 가능

std::vector<std::string> v = {“aaa”, “bbb”, “ccc”, “ddd”};
std::vector<std::string> v({“aaa”, “bbb”, “ccc”, “ccc”});
std::vector<std::string> v{“aaa”, “bbb”, “ccc”, “ddd”};

// Uniform initialization
UNIFORM INITIALIZATION
모든 초기화 과정이 {var1, var2, … varn} 형태로 통합하여 사용이 가능
struct BasicStruct {
int x;
double y;
};
struct AltStruct {
AltStruct(int x, double y) : x_{x}, y_{y} {}

private:
int x_;
double y_;
};
BasicStruct var1{5, 3.2};
AltStruct var2{2, 4.3};
불편했던 부분을 개선

언어 사용성 강화
TYPE INFERENCE
타입을 추론해서 선언이 가능

auto itr = m_map.find(10);

//std::map<int, string>::iterator itr = m_map.find(10);

auto intValue = 5;
auto fValue = 5.0f;
auto로 선언된 변수랑 같은 타입으로 선언하는 법
const decltype(itr) end = m_map.end();
decltype(intValue) intValue2 = 10;
RANGE-BASED FOR LOOP
모든 시퀀스 컨테이너의 range에 따라 아이템 순회가 가능해짐
int my_array[5] = {1, 2, 3, 4, 5};
for (int &x : my_array) {
x *= 2;
}
std::vector<int> numList = {1,2,3,4,5};
for (int &num : numList) {
cout << “num: “ << num * 2;

}
LAMBDA FUNCTIONS
[capture](parameters)->return-type{body}
간단한 익명 함수 처리가 가능해짐
다양한 방식으로 사용이 가능
CPS 코딩이 편해짐
자세한 용례는 http://en.wikipedia.org/wiki/Anonymous_function#C.2B.2B 참고
LAMBDA 예제
std::vector<int> some_list{ 1, 2, 3, 4, 5 };
int total = 0;
std::for_each(begin(some_list), end(some_list), [&total](int x) {
total += x;
});
OBJECT CONSTRUCTION IMPROVEMENTS
생성자에서 다른 생성자를 호출 가능해짐

class SomeType {
int number;

public:
SomeType(int new_number) : number(new_number) {}
SomeType() : SomeType(42) {}
};
OBJECT CONSTRUCTION IMPROVEMENTS
베이스 클래스 생성자 상속이 가능하고 어떤 생성자를 상속받을지 설정 가능
class BaseClass {
public:
BaseClass(int value);
};

class DerivedClass : public BaseClass {
public:
using BaseClass::BaseClass;
};
EXPLICIT OVERRIDE AND FINAL
struct Base {
virtual void some_func(float);
};

struct Derived : Base {
virtual void some_func(int);
};
실수로 시그니처가 달라지면 virtual function이 2개 만들어지는 문제가 있었음
EXPLICIT OVERRIDE AND FINAL
struct Base {
virtual void some_func(float);
};

struct Derived : Base {
virtual void some_func(int) override; //베이스 클래스와 시그니처가 맞지 않으면 에러를 표시
};
걍 오버라이드 할 때엔 무조건 뒤에 붙이시면 됩니다
EXPLICIT OVERRIDE AND FINAL
final 키워드로 상속이나 오버라이드를 더 이상 못하게 막을 수 있음
struct Base1 final { };
struct Derived1 : Base1 { }; // Base1 클래스가 final 선언되었으므로 에러

struct Base2 {
virtual void f() final;
};
struct Derived2 : Base2 {
void f(); //가상함수 Base2::f가 final 처리 되었으므로 에러
};
NULL POINTER CONSTANT
nullptr 상수가 만들어짐

char *pc = nullptr; //OK
bool b = nullptr

//OK. b is false

int a = nullptr;

//error
STRONGLY TYPED ENUMERATIONS
enum에 이름과 타입 설정이 불가능해서 예전엔 이런 꼼수를 썼음
namespace Enumeration {
enum {
A,
B,
C

}
typedef int type;
}

Enumeration::type a = Enumeration::A;
STRONGLY TYPED ENUMERATIONS
이젠 타입과 이름 설정이 가능
enum class Enumeration : unsigned int {
Val1,
Val2,
Val3 = 100,
Val4 // = 101
};
RIGHT ANGLE BRAKET
옛날에는 컴파일러가 템플릿 키워드 중첩해서 쓴 것과 << 연산자랑 헷갈렸음
이젠 컴파일러가 알아서 잘 해석해줌
안 되던 게 됩니다

언어 기능 강화
VARIADIC TEMPLATES
템플릿 패러미터를 가변적으로 받을 수 있게 변경됨
이거 덕분에 템플릿 메타 프로그래밍 할 때 패러미터 개수 문제로 골머리 썩던 게 해결
자세한 내용은 http://en.wikipedia.org/wiki/Variadic_templates 참고
NEW STRING LITERALS
문자 인코딩 타입을 정할 수 있게 되었다
u8"I'm a UTF-8 string."
u"This is a UTF-16 string."
U"This is a UTF-32 string.“
R”*(This is a “raw” string)*”
이 때문에 새로운 캐릭터 타입이 추가됨
char16_t
char32_t
MULTITHREADING MEMORY MODEL
C++11 에 멀티스레드 라이브러리가 추가 됨
관련해서 메모리 모델 추가 됨
Memory ordering
Memory barrier
Consistency model
Shared memory
LONG LONG INT
드디어 64비트 정수가 표준화 됨
그 전에는 컴파일러들이 그냥 지원하는 거였음
STATIC ASSERTIONS
컴파일 타임에 걸 수 있는 assertion이 생김
주로 전처리 지시자나 템플릿 사용등을 검사

static_assert((GREEKPI > 3.14) && (GREEKPI < 3.15), "GREEKPI is inaccurate!");
언어가 바뀌었으니 표준 라이브러리도 바뀌었겠죠?

표준 라이브러리 변경
기존 라이브러리에 C++11 적용
적용 된 기능들
Rvalue reference 와 move constructor
UTF-16, UTF-32
Variadic templates
auto, decltype
explicit conversion operators
default/deleted functions
THREADING FACILITIES
앞서 얘기한대로 스레딩 관련 컴포넌트들 추가
std::thread, std::mutex, std::recursive_mutex
std::future, std::promise, std::async
etc.
thread_pool은 아직 안 들어감
NEW CONTAINERS
Tuple
std::tuple
Hash tables
std::unordered_set
std::unordered_map
std::unordered_multiset
std::unordered_multimap
REGULAR EXPRESSION
드디어 C++에 정규표현식이 들어갔습니다!
std::regex, std::regex_search, std::match_results etc.
SMART POINTERS
스마트 포인터가 추가됨
std::unique_ptr

// ownership을 1개로 제한

std::shared_ptr

// 공유 포인터

std::weak_ptr

// 공유 포인터의 상호참조를 방지하고 싶을 때

std::auto_ptr

// 메모리 자동 해지 포인터. ownership 문제가 있음
그 외에 다루지 않은 부분은
C++11 표준 문서나 위키피디아를 참고하시면 됩니다
참고
Wikipedia : http://en.wikipedia.org/wiki/C%2B%2B11
rein.kr : http://rein.kr/blog/archives/2371

More Related Content

What's hot

[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)유익아카데미
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)유익아카데미
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
[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
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초진수 정
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)유익아카데미
 
Macro & compilation
Macro & compilationMacro & compilation
Macro & compilationIkhoon Eom
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부Gwangwhi Mah
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장HolyTak
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 

What's hot (20)

C++11
C++11C++11
C++11
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
Lua script
Lua scriptLua script
Lua script
 
[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++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
6 function
6 function6 function
6 function
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
 
Macro & compilation
Macro & compilationMacro & compilation
Macro & compilation
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
6 swift 고급함수
6 swift 고급함수6 swift 고급함수
6 swift 고급함수
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 

Viewers also liked

(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례Jeongsang Baek
 
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로Seok-ju Yun
 
Move semantics
Move semanticsMove semantics
Move semanticsQooJuice
 
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자![NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!Jeongsang Baek
 
Rhea mmo node_for_share
Rhea mmo node_for_shareRhea mmo node_for_share
Rhea mmo node_for_shareRhea Strike
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
[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
 
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법Jeongsang Baek
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교iFunFactory Inc.
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 
Testing nodejs apps
Testing nodejs appsTesting nodejs apps
Testing nodejs appsfelipefsilva
 
넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 Rhea Strike
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)Sang Don Kim
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 

Viewers also liked (16)

(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
 
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
 
Move semantics
Move semanticsMove semantics
Move semantics
 
Inside node.js
Inside node.jsInside node.js
Inside node.js
 
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자![NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
 
Rhea mmo node_for_share
Rhea mmo node_for_shareRhea mmo node_for_share
Rhea mmo node_for_share
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
[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 +신촌
 
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
Testing nodejs apps
Testing nodejs appsTesting nodejs apps
Testing nodejs apps
 
넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크 넌프로그래머를 위한 서버/네트워크
넌프로그래머를 위한 서버/네트워크
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
C++11
C++11C++11
C++11
 

Similar to What’s new in c++11

About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체해강
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part oneJi Hun Kim
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉HyunJoon Park
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
Multithread programming 20151206_서진택
Multithread programming 20151206_서진택Multithread programming 20151206_서진택
Multithread programming 20151206_서진택JinTaek Seo
 
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]leusin2
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장Jong Pil Won
 
엑스룰(XRule) 자바스크립트 양식 입력 자동검사
엑스룰(XRule) 자바스크립트 양식 입력 자동검사엑스룰(XRule) 자바스크립트 양식 입력 자동검사
엑스룰(XRule) 자바스크립트 양식 입력 자동검사Jinhyun Sim
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과민욱 이
 
Template at c++
Template at c++Template at c++
Template at c++Lusain Kim
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차HyunJoon Park
 
불어오는 변화의 바람, 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 명신 김
 

Similar to What’s new in c++11 (20)

About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
06장 함수
06장 함수06장 함수
06장 함수
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
 
C++11
C++11C++11
C++11
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
Multithread programming 20151206_서진택
Multithread programming 20151206_서진택Multithread programming 20151206_서진택
Multithread programming 20151206_서진택
 
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장
 
엑스룰(XRule) 자바스크립트 양식 입력 자동검사
엑스룰(XRule) 자바스크립트 양식 입력 자동검사엑스룰(XRule) 자바스크립트 양식 입력 자동검사
엑스룰(XRule) 자바스크립트 양식 입력 자동검사
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
Template at c++
Template at c++Template at c++
Template at c++
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
불어오는 변화의 바람, 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
 

Recently uploaded

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 

Recently uploaded (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 

What’s new in c++11

  • 1. WHAT’S NEW IN C++11 Blue Wind 백정상
  • 2. C++11 C++0x 로 알려짐 2011년 8월에 표준으로 선정
  • 3. CONTENTS 퍼포먼스 향상 언어 사용성 강화 언어 기능 강화 c++ standard libraries 변경
  • 5. R-VALUE REFERENCES l-value 수식의 왼쪽에 있는 값 일반적으로 대입되는 값 r-value 수식의 오른쪽에 있는 값 일반적으로 대입하는 값 r-value reference 말 그래도 r-value의 레퍼런스
  • 6. 왜 필요한가 l-value reference는 익숙히 사용하고 있었다 큰 데이터를 패러미터로 넘길 때 포인터보다 좀 더 안전하게 레퍼런스를 이용 그럼 큰 데이터를 반환해야 할 때엔? 기존에는 컴파일러에서 최적화 해주는 수준으로 커버 C++11은 move semantic을 도입 의미 없는 복사 / 생성을 최적화 이를 위해서 반환해야 할 값의 레퍼런스(r-value reference)가 필요하다
  • 7. 예제 std::vector<int> MakeVector() { std::vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); return vec; } std::vector<int> vec2 = MakeVector();
  • 8. 기존의 벡터 복사 생성자 vec 카피 vec2 새로 할당 된 메모리
  • 9. R-VALUE REF를 이용해 반환하는 과정 vec vec3 null
  • 10. R-VALUE REF를 이용해 반환하는 과정 vec vec3 null
  • 11. 이를 위해서 C++11은 이를 위해 두 가지 방식의 생성자를 지원 copy constructor vector::vector(const vector<T>&v) move constructor vector::vector(vector<T>&& v) 대입 연산자도 비슷하게 두 가지를 지원
  • 12. 변수에서 R-VALUE를 얻어야 할 때 std::move()를 사용해서 r-value를 전달 class A { A(A&& a) { this->s = std::move(a.s); } private: HugeBigObj s; }
  • 13. GENERALIZED CONSTANT EXPRESSIONS 기존에는 상수 연산이 없고 상수만 사용할 수 있었음 코드 내에 잦은 상수연산은 컴파일러 퍼포먼스를 저하시켰음 C++11에는 상수 연산 키워드가 추가 int get_five() {return 5;} int some_value[get_five() + 7]; // 컴파일 에러 constexpr int get_five() {return 5;} int some_value[get_five() + 7]; // 12개의 정수 배열이 만들어짐
  • 14. INITIALIZER LIST POD나 스탠다드 컨테이너의 초기 변수를 리스트 형태로 전달 가능 std::vector<std::string> v = {“aaa”, “bbb”, “ccc”, “ddd”}; std::vector<std::string> v({“aaa”, “bbb”, “ccc”, “ccc”}); std::vector<std::string> v{“aaa”, “bbb”, “ccc”, “ddd”}; // Uniform initialization
  • 15. UNIFORM INITIALIZATION 모든 초기화 과정이 {var1, var2, … varn} 형태로 통합하여 사용이 가능 struct BasicStruct { int x; double y; }; struct AltStruct { AltStruct(int x, double y) : x_{x}, y_{y} {} private: int x_; double y_; }; BasicStruct var1{5, 3.2}; AltStruct var2{2, 4.3};
  • 17. TYPE INFERENCE 타입을 추론해서 선언이 가능 auto itr = m_map.find(10); //std::map<int, string>::iterator itr = m_map.find(10); auto intValue = 5; auto fValue = 5.0f; auto로 선언된 변수랑 같은 타입으로 선언하는 법 const decltype(itr) end = m_map.end(); decltype(intValue) intValue2 = 10;
  • 18. RANGE-BASED FOR LOOP 모든 시퀀스 컨테이너의 range에 따라 아이템 순회가 가능해짐 int my_array[5] = {1, 2, 3, 4, 5}; for (int &x : my_array) { x *= 2; } std::vector<int> numList = {1,2,3,4,5}; for (int &num : numList) { cout << “num: “ << num * 2; }
  • 19. LAMBDA FUNCTIONS [capture](parameters)->return-type{body} 간단한 익명 함수 처리가 가능해짐 다양한 방식으로 사용이 가능 CPS 코딩이 편해짐 자세한 용례는 http://en.wikipedia.org/wiki/Anonymous_function#C.2B.2B 참고
  • 20. LAMBDA 예제 std::vector<int> some_list{ 1, 2, 3, 4, 5 }; int total = 0; std::for_each(begin(some_list), end(some_list), [&total](int x) { total += x; });
  • 21. OBJECT CONSTRUCTION IMPROVEMENTS 생성자에서 다른 생성자를 호출 가능해짐 class SomeType { int number; public: SomeType(int new_number) : number(new_number) {} SomeType() : SomeType(42) {} };
  • 22. OBJECT CONSTRUCTION IMPROVEMENTS 베이스 클래스 생성자 상속이 가능하고 어떤 생성자를 상속받을지 설정 가능 class BaseClass { public: BaseClass(int value); }; class DerivedClass : public BaseClass { public: using BaseClass::BaseClass; };
  • 23. EXPLICIT OVERRIDE AND FINAL struct Base { virtual void some_func(float); }; struct Derived : Base { virtual void some_func(int); }; 실수로 시그니처가 달라지면 virtual function이 2개 만들어지는 문제가 있었음
  • 24. EXPLICIT OVERRIDE AND FINAL struct Base { virtual void some_func(float); }; struct Derived : Base { virtual void some_func(int) override; //베이스 클래스와 시그니처가 맞지 않으면 에러를 표시 }; 걍 오버라이드 할 때엔 무조건 뒤에 붙이시면 됩니다
  • 25. EXPLICIT OVERRIDE AND FINAL final 키워드로 상속이나 오버라이드를 더 이상 못하게 막을 수 있음 struct Base1 final { }; struct Derived1 : Base1 { }; // Base1 클래스가 final 선언되었으므로 에러 struct Base2 { virtual void f() final; }; struct Derived2 : Base2 { void f(); //가상함수 Base2::f가 final 처리 되었으므로 에러 };
  • 26. NULL POINTER CONSTANT nullptr 상수가 만들어짐 char *pc = nullptr; //OK bool b = nullptr //OK. b is false int a = nullptr; //error
  • 27. STRONGLY TYPED ENUMERATIONS enum에 이름과 타입 설정이 불가능해서 예전엔 이런 꼼수를 썼음 namespace Enumeration { enum { A, B, C } typedef int type; } Enumeration::type a = Enumeration::A;
  • 28. STRONGLY TYPED ENUMERATIONS 이젠 타입과 이름 설정이 가능 enum class Enumeration : unsigned int { Val1, Val2, Val3 = 100, Val4 // = 101 };
  • 29. RIGHT ANGLE BRAKET 옛날에는 컴파일러가 템플릿 키워드 중첩해서 쓴 것과 << 연산자랑 헷갈렸음 이젠 컴파일러가 알아서 잘 해석해줌
  • 30. 안 되던 게 됩니다 언어 기능 강화
  • 31. VARIADIC TEMPLATES 템플릿 패러미터를 가변적으로 받을 수 있게 변경됨 이거 덕분에 템플릿 메타 프로그래밍 할 때 패러미터 개수 문제로 골머리 썩던 게 해결 자세한 내용은 http://en.wikipedia.org/wiki/Variadic_templates 참고
  • 32. NEW STRING LITERALS 문자 인코딩 타입을 정할 수 있게 되었다 u8"I'm a UTF-8 string." u"This is a UTF-16 string." U"This is a UTF-32 string.“ R”*(This is a “raw” string)*” 이 때문에 새로운 캐릭터 타입이 추가됨 char16_t char32_t
  • 33. MULTITHREADING MEMORY MODEL C++11 에 멀티스레드 라이브러리가 추가 됨 관련해서 메모리 모델 추가 됨 Memory ordering Memory barrier Consistency model Shared memory
  • 34. LONG LONG INT 드디어 64비트 정수가 표준화 됨 그 전에는 컴파일러들이 그냥 지원하는 거였음
  • 35. STATIC ASSERTIONS 컴파일 타임에 걸 수 있는 assertion이 생김 주로 전처리 지시자나 템플릿 사용등을 검사 static_assert((GREEKPI > 3.14) && (GREEKPI < 3.15), "GREEKPI is inaccurate!");
  • 36. 언어가 바뀌었으니 표준 라이브러리도 바뀌었겠죠? 표준 라이브러리 변경
  • 37. 기존 라이브러리에 C++11 적용 적용 된 기능들 Rvalue reference 와 move constructor UTF-16, UTF-32 Variadic templates auto, decltype explicit conversion operators default/deleted functions
  • 38. THREADING FACILITIES 앞서 얘기한대로 스레딩 관련 컴포넌트들 추가 std::thread, std::mutex, std::recursive_mutex std::future, std::promise, std::async etc. thread_pool은 아직 안 들어감
  • 40. REGULAR EXPRESSION 드디어 C++에 정규표현식이 들어갔습니다! std::regex, std::regex_search, std::match_results etc.
  • 41. SMART POINTERS 스마트 포인터가 추가됨 std::unique_ptr // ownership을 1개로 제한 std::shared_ptr // 공유 포인터 std::weak_ptr // 공유 포인터의 상호참조를 방지하고 싶을 때 std::auto_ptr // 메모리 자동 해지 포인터. ownership 문제가 있음
  • 42. 그 외에 다루지 않은 부분은 C++11 표준 문서나 위키피디아를 참고하시면 됩니다