[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
Item 14 : Declare functions noexcept if they won't emit exceptions. +윤석준
Item 15 : Use constexpr whenever possible. +이동우
Item 16 : Make const member functions thread safe. +제한재
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
Item 14 : Declare functions noexcept if they won't emit exceptions. +윤석준
Item 15 : Use constexpr whenever possible. +이동우
Item 16 : Make const member functions thread safe. +제한재
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23Seok-joon Yun
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23
Item 20, 21, 23
Item 20 : Use std::weak_ptr for std::shared_ptr-like pointers that can dangle. +정은식
Item 21 : Prefer std::make_unique and std::make_shared to direct use of new. +이동우
Item 23 : Understand std::move and std::forward. +제한재
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23Seok-joon Yun
[C++ korea] Effective Modern C++ 신촌 Study Item20,21,23
Item 20, 21, 23
Item 20 : Use std::weak_ptr for std::shared_ptr-like pointers that can dangle. +정은식
Item 21 : Prefer std::make_unique and std::make_shared to direct use of new. +이동우
Item 23 : Understand std::move and std::forward. +제한재
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
http://github.com/ipkn/crow
Crow 프로젝트에서 사용한 C++11 기법들을 실제 구현에 대한 설명을 포함하여 자세히 설명한 발표자료입니다.
C++11 features used in Crow
video:
http://youtu.be/MixS9c3mE6U
https://vimeo.com/119627253
1. raw string literals
" 이나 \ 는 문자열에 포함시킬 때 \를 한번더 붙여주어야 한다.
그러나 C++11에서는 R"()" 내에 스트링은 이러한 불편함을 없애준다.
2. vriadic templates
타입의 갯수가 정해져 있지 않은 클래스를 구현할 때 유용
3. lambda expression
캡쳐 설정에 유의 하여야 한다.
4. std::function
모든 callable가능한 타겟을 래핑한다.
5. std::bind
javascript의 clojure와 비슷한 기능, 파라미터의 상태를
함수 객체가 저장할 수가 있다.
6. std::async
비동기 실행을 위한 클래스, 잠재적으로 쓰레드를 생성하며, 쓰레드와 다른점은 return 값을 받을 수 있다.
7. 멀티패러다임을 지향하는 언어로써 함수형 언어의 기능도 흡수 하는 중. C++은 사용자의 능력에 따라 절차형, 객체지향형, 함수형등 자유자재로 구현 가능. 그러니 잘하자.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
2. auto
●대입하는 값 형태에 따라 컴파일러가 판단하여 변수타입을 정
의함.
●컴파일러가 판단해야하므로 변수는 반드시 초기화.
auto i = 10; // int
auto k; // error!
for ( auto ib = mystl.begin(), ie = mystl.end(); ib != ie; ib++
) { ... }
3. auto
●리턴 타입을 함수 마지막에 적는 형식
●auto function (parameters) -> returntype { ... }
●decltype과 함께 메타 프로그래밍 할 때 유용
auto function(int a) -> int { return a; }
int function(int a) { return a; }
auto function(int a, double b) -> decltype(a*b) { return a*b; }
decltype(a*b) function(int a, double b) { return a*b; } // error! -
a, b가 아직 나오지 않아 추론할 수 없음
4. decltype
●선언한 타입을 반환하는 것으로 메타 프로그래밍용.
●인자에 들어오는 것 어떠한 것도 실행하지 않음.
struct A { double x; };
const A a = { 1.0 };
const double b = 1.0;
decltype(a.x) ac = 1.0;
decltype(b) bc = 1.0;
ac = 3.0;
//bc = 3.0; - error `bc' is `const double'.
6. static_assert
●컴파일 타임에 조건을 검사하여 오류 발생.
●조건식은 반드시 상수 비교
#define TEST 1
...
static_assert(TEST==0, "Error!"); // compile error!
7. lamda
●이름 없는 함수
●STL류에서 Functor를 만들 때, 편리
●형식: [captures] (parameters) -> returntype { /* implement */ } ();
o[] { return 3.14; } (); // 실행
oauto functor_1 = [] (int a) -> int { return a; }; // 구현 및 대입
int iv[] = { 2, 9, 3, 1, 7, 6 };
sort(iv, iv+6, [] (int a, int b) -> bool{ return a < b; });
for_each(iv, iv+6, [] (int a) { cout << a << endl; } );
8. using
●이름 재정의 - typedef와 다름
●typedef는 타입에 대한 alias를 추가하는 것이지 새로운 타입을
추가하는 것이 아님 - 약한 형식 검사
●범위를 정할 수 있음.
using NewName = OldName;
using Namespace::Name; == using Name = Namespace::Name;
int i; using r = i; == int i; int& r = i;
using Cos = std::cos; != using C = std::cos(double);
9. enum
●enum에 타입을 줄 수 있음. (기본형 int)
●enum의 변수의 범위 지정 가능. (기본은 글로벌)
oenum class Name : Type { enums... };
enum class E : unsigned int { E1, E2, E3 };
enum class F : unsigned int { E1, E2, E3 };
int
main(int,char*[])
{
E e = E::E1;
F f = F::E1;
}
10. friend
●typedef 로 정의한 타입도 추가 가능
●템플릿 인수 사용 가능
class C;
typedef Ctype C;
template<typename _T>
class X1 {
friend class C;
friend class Ctype;
friend class _T;
};
11. for
●범위 기반 반복
int iv[] = { 1, 2, 9, 3, 6 };
for ( int& i : iv ) cout << i << endl;
vector<int> isv = { 1, 2, 9, 3, 6 };
for ( int i : isv ) cout << i << endl;
12. >>
●기존에는 '>>'를 무조건 우측 시프트 연산자로 인식
●Nested Template 사용 시 띄어 쓰지 않아도 됨
#include <vector>
using namespace std;
typedef vector<vector<int>> double_vector;
13. delegating constructor
●같은 클래스 내에 다른 생성자에게 위임
class MyClass {
public:
MyClass(int a, int b) { ... }
MyClass() : MyClass(0, 0) { ... }
MyClass(const MyClass& obj) : MyClass(obj.a, obj.b) { ... }
};
14. inheriting constructor
●부모 클래스 생성자를 암묵적으로 상속.
●클래스 내 using Parent::Parent; 구문을 사용하여 상속.
●using Parent::Parent(...); 구문으로 일부 상속 가능.
●자식 멤버 변수 초기화는 하지 않으니 주의.
●기본생성자와 복사생성자는 상속하지 않으니 주의.
class Parent { public: Parent(int a) { ... } };
class Child {
public:
using Parent::Parent;
int a;
};
15. constexpr
●수식 또는 함수가 상수 표현식인 것을 명시하여, 상수만을 필
요로 하는 문법에 사용할 수 있도록 함.
constexpr int size(void) { return 1+5; }
int v[size()];