SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
C++0x
      言語の未来を語る




高橋 晶(アキラ)
Blog: Faith and Brave – C++で遊ぼう


        わんくま同盟 東京勉強会 #22
Agenda
•   What’s C++0x
•   Angle Bracket
•   Initializer List
•   auto
•   decltype
•   Delegating Constructor
•   Extending sizeof
•   Raw String Literal
•   Defaulted and Deleted Functions
•   Member Initializers
•   nullptr
•   constexpr
•   Template Aliases
•   static_assert
•   Variadic Templates
•   Concept
•   Range-base for loop
•   RValue Reference・Move Semantics
•   Lambda Expression
•   New Function Daclarator Syntax




                             わんくま同盟 東京勉強会 #22
What’s C++0x (C++0xってなに?)

• C++の次バージョン(現在はC++03)

• 「0x」とは200x年の意味で、C++09を目指している
  (もしかしたら C++10 になっちゃうかも)

• エキスパートよりも初心者のための言語拡張を行う




            わんくま同盟 東京勉強会 #22
Angle Bracket(山カッコ)

• C++03では以下のコードはコンパイルエラーになる

vector<basic_string<char>> v;
                   // エラー! operator>> が使われている



• 連続した山カッコがシフト演算子と判断されてしまう
• C++0xではこの問題が解決される




                わんくま同盟 東京勉強会 #22
Initializer List(初期化子リスト)

• ユーザー定義クラスで配列のような初期化を可能にする
• Bjarne氏曰く「何で今までできなかったのかわからない」
• std::initializer_listクラスを使用する

// 初期化
vector<int> v = {3, 1, 4};

// 戻り値
vector<int> factory() { return {3, 1, 4}; }

// 引数
void foo(const vector<int>& v) {}
foo({3, 1, 4});


                     わんくま同盟 東京勉強会 #22
auto

• 型推論
• autoキーワードの意味が変更になる(めずらしい)
• autoで宣言された変数の型は右辺から導出される

vector<int> v;
vector<int>::iterator it = v.begin(); // C++03
auto                  it = v.begin(); // C++0x

const/volatile修飾や、参照(&)・ポインタ(*)等を付加することも
できる(const auto&, auto*, etc...)




                   わんくま同盟 東京勉強会 #22
decltype

• 計算結果の型を求めることができる
• 他の機能で型を推論に使われたり、インスタンスか
  らメンバの型を取得したり…

int x = 3;
decltype(x) y = 0;   // int y = 0;
decltype(x*) z = &x; // int* z = &x;


int foo() { return 0; }
decltype(foo()) x = foo(); // int x = foo();



                   わんくま同盟 東京勉強会 #22
Delegating Constructor

• 移譲コンストラクタ
• コンストラクタ内で、他のコンストラクタを呼べる

class widget {
  int x_, y_, z_;

  widget(int x, int y, int z)
    : x_(x), y_(y), z_(z) {}
public:
  widget()
    : widget(0, 0, 0) {} // widget(int, int, int)
};

                    わんくま同盟 東京勉強会 #22
Extending sizeof(拡張sizeof)

• インスタンス作成せずにメンバ変数を sizeof できる
  ようになる

struct hoge {
  int id;
};

sizeof(hoge::id); // 今まではできなかった




                     わんくま同盟 東京勉強会 #22
Raw String Literal

• Rプレフィックスを付加した文字列は
  エスケープシーケンスを無視するようになる

// C++03
string path = “C:¥¥abc”;
string data = “Akira¥¥nTakahashi”;
wstring wpath = L”C:¥¥abc”;

// C++0x
string path = R”C:¥abc”;
string data = R”Akira¥nTakahashi”;
wstring wpath = LR”C:¥abc”;

                 わんくま同盟 東京勉強会 #22
Defaulted and Deleted Functions

• コンパイラによって自動生成される関数の制御が
 できるようになる

struct hoge {
    hoge() = default;
      // コンパイラが自動生成するデフォルトコンストラクタを使う

     // コピー禁止
     hoge(const hoge&) = delete;
     hoge& operator=(const hoge&) = delete;
};



                    わんくま同盟 東京勉強会 #22
Member Initializers(メンバ初期化子)

• メンバ変数の宣言時に初期化できるようになる

struct hoge {
  int    age = 23;
  string name(“Akira”);
};


• コンストラクタでの初期化子リストが優先される




                   わんくま同盟 東京勉強会 #22
nullptr

• ヌルポインタを表すキーワード nullptr を追加
• nullptrが導入されれば、0とNULLを非推奨とするこ
  とができる

int* p = nullptr;              // C++0x
int* p = static_cast<int*>(0); // C++03
int* p = NULL;                 // C...(void*)0




                   わんくま同盟 東京勉強会 #22
constexpr

• 定数式
• コンパイル時に実行される式を作成することができる


constexpr int size(int x) {
  return x * 2;
}

int ar[size(3)]; // OK...配列のサイズは6

いろいろと制限があるらしい(再帰ができない等...)

                  わんくま同盟 東京勉強会 #22
Template Aliases

• テンプレートを使用して型の別名を付けることができ
  るようになる(いわゆる template typedef)

template <class T>
using Vec = vector<T>;

Vec<int> v;



• 型を返すメタ関数が書きやすくなる
 (もしくはいらなくなる)

                   わんくま同盟 東京勉強会 #22
static_assert

• コンパイル時アサート
• 静的な条件と、エラーメッセージを指定する

template <class T>
void foo(T value) {
  static_assert(is_integral<T>::value,
                “not integral”);
}

foo(3);    // OK
foo(3.14); // エラー! not integral



                   わんくま同盟 東京勉強会 #22
Variadic Templates
• 可変引数テンプレート
• 基本的に再帰を使って処理する

template <class T>
void print(T arg) {
  cout << arg << endl;
}

template <class Head, class... Tail>
void print(Head head, Tail... tail) {
  cout << head << endl;
  print(tail...);
}

print(1, 2, 3, 4, 5, 6, 7);


ちなみに、sizeof...(Args); とすると、型の数を取得できる

                         わんくま同盟 東京勉強会 #22
Concept

• 型に対する制約
• テンプレートをより簡単にし、より強力にするもの

コンセプトには以下の3つの機能がある
• Concept definitions
• Requirements clauses
• Concept maps




          わんくま同盟 東京勉強会 #22
Concept definitions

• 型に対する要求を定義する
  「型Tはxxメンバを持っていなければならない」
  「型Tはyy型を持っていなければならない」


concept LessThanComparable<class T> {
  bool operator<(const T&, const T&);
}

このコンセプトは、「型Tは operator< を持っていなければならない」
という要求




                   わんくま同盟 東京勉強会 #22
Requirements clauses

• 型Tに必要な要求(コンセプト)を指定する

template <class T>
requires LessThanComparable<T>
const T& min(const T& a, const T& b) {
  return a < b ? a : b;
}
これにより
「型TはLessThanComparableの要求を満たさなければならない」
といった制約を行うことができる




               わんくま同盟 東京勉強会 #22
ここまででうれしいこと

• 人間が読めるコンパイルエラーを出力してくれる

list<int> ls;
sort(ls.begin(), ls.end()); // エラー!

「第1引数はRandomAccessIteratorの要求を満たしません」
といったエラーメッセージを出力してくれるだろう




                     わんくま同盟 東京勉強会 #22
Concept maps その1

• 既存の型がどのようにコンセプトの要求を満たすか
  を定義する

以下のようなコンセプトとそれを要求する関数があった場合
concept RandomAccessIterator<class T> {
  typename value_type;
  typename difference_type;
}

template <RandomAccessIterator Iterator>
void sort(Iterator first, Iterator last) {
  ...
}

                    わんくま同盟 東京勉強会 #22
Concept maps その2

以下のような結果になる

vector<int> v;
sort(v.begin(), v.end()); // OK

int ar[] = {3, 1, 4};
sort(ar, ar + 3);
    // エラー!ポインタはRandomAccessIteratorの要求を満たしません

ポインタはランダムアクセスイテレータとして使用できなければならない




                   わんくま同盟 東京勉強会 #22
Concept maps その3

• そこで、concept_mapを使用して
  RandomAccessIteratorコンセプトを特殊化する

template <class T>
concept_map RandomAccessIterator<T*> {
  typedef T         value_type;
  typedef ptrdiff_t difference_type;
}

これにより、ポインタをRandomAccessIteratorとして使える




                   わんくま同盟 東京勉強会 #22
Concept mapsがあるとできること

• Containerコンセプトを使用することにより
  配列をコンテナとして使用することができる

template <Container Cont>
void sort(Cont& c) {
  sort(c.begin(), c.end());
}

std::vector<int> v;
sort(v); // OK

int ar[] = {3, 1, 4};
sort(ar); // OK


                 わんくま同盟 東京勉強会 #22
書ききれないコンセプト

•   Range-baseのアルゴリズムは(まだ?)提供されない
•   requiresはカンマ区切りで複数指定可能
•   late_checkブロックで従来の型チェックも可能
•   コンセプトでのオーバーロードも可能
•   Scoped Concept Mapsとか・・・
•   Axiomとか・・・

• コンセプトは超強力!!!




              わんくま同盟 東京勉強会 #22
Range-base for loop

• コレクションを走査するfor文
• std::Rangeコンセプトを使用している

vector<int> v;
for (const int& item : v) {
  cout << item << endl;
}

初期化子リストを渡すことも可能
for (int item : {3, 1, 4}) {
    ...
}

                   わんくま同盟 東京勉強会 #22
右辺値参照・Move Semantics

• 右辺値(一時オブジェクト)はどうせ消えちゃうのだから
  内部のメモリを移動しても問題ないでしょ。というもの
• 移動された一時オブジェクトは破壊される
• 右辺値参照には&&演算子を使用する


template <class T>
class vector {
public:
  vector(const vector&); // Copy Constructor
  vector(vector&&);      // Move Constructor
};



                   わんくま同盟 東京勉強会 #22
左辺値と右辺値

• 左辺値とは
 ・名前が付いたオブジェクトを指す

• 右辺値とは
 ・名前がないオブジェクトを指す
 ・関数の戻り値は、参照やポインタでない限り
  右辺値(一時オブジェクト)である




         わんくま同盟 東京勉強会 #22
右辺値参照を使ってみる

右辺値参照は、使う側はとくに気にする必要がない(ことが多い)


vector<int> factory()
{
  vector<int> v;
  ...
  return v;
}

vector<int> v = factory(); // Move Contructor

右辺値参照を使えば大きいオブジェクトを気軽に戻り値にできる


                   わんくま同盟 東京勉強会 #22
右辺値参照のための標準関数
•   <utility>にstd::moveとstd::forwardという2つの関数が用意される
namespace std {
  template <class T>
  struct identity {
    typedef T type;
  };

    template <class T>
    inline typename remove_reference<T>::type&& move(T&& x)
      { return x; }

    template <class T>
    inline T&& forward(typename identity<T>::type&& x)
      { return x; }
}

・std::move は左辺値を右辺値に変換する関数
・std::forward は右辺値を安全に転送する関数


                         わんくま同盟 東京勉強会 #22
基本的な
       Move ConstructorとMove Assinmentの書き方
class Derived : public Base {
    std::vector<int> vec;
    std::string      name;
public:
    // move constructor
    Derived(Derived&& x)
        : Base(std::forward<Base>(x)),
          vec(std::move(x.vec)),
          name(std::move(x.name)){}

     // move assignment operator
     Derived& operator=(Derived&& x) {
         Base::operator=(std::forward<Base>(x));
         vec = std::move(x.vec);
         name = std::move(x.name);
         return *this;
     }
};

                      わんくま同盟 東京勉強会 #22
Lambda Expression(ラムダ式)

• 匿名関数オブジェクト

vector<int> v;
find_if(v.begin(), v.end(),
            [](int x) { return x == 3; });

以下はラムダ式によって生成される匿名関数オブジェクト(簡易的)
struct F {
  bool operator()(int x) {
    return x == 3;
  }
};


                   わんくま同盟 東京勉強会 #22
環境のキャプチャ

• デフォルトのキャプチャ方法
vector<int> v;
int sum = 0;
int rate = 2;
for_each(v.begin(), v.end(), [&](int x) { sum += x * rate; });

[&] : デフォルトのキャプチャ方法は参照
[=] : デフォルトのキャプチャ方法はコピー
[] : 環境なし

• キャプチャリスト(個別指定)
for_each(v.begin(), v.end(), [=, &sum] { sum += x * rate; });

デフォルトのキャプチャ方法はコピー、sumは参照でキャプチャ




                       わんくま同盟 東京勉強会 #22
戻り値の型

• ラムダ式の戻り値の型は明示的に指定することもできる
[](int x) -> bool { return x == 3; }



• 省略した場合は、return文をdecltypeした型が戻り値の型
以下の2つのラムダ式は同じ意味である
[](int x) -> decltype(x == 3) { return x == 3; }
[](int x)                     { return x == 3; }

return 文を省略した場合、戻り値の型は void になる




                   わんくま同盟 東京勉強会 #22
書ききれなかったラムダ
•   メンバ関数内でのラムダ式はそのクラスのfriendと見なされ、
    privateメンバにアクセスできる

•   参照環境のみを持つラムダ式はstd::reference_closureを継承したクラスになる
    (キャプチャした変数をメンバに持たずにスコープをのぞき見る)

•   参照環境のみを持つラムダ式はスコープから外れるとその実行は未定義
    (つまり、参照ラムダを戻り値にしてはいけない)

•   const/volatile修飾も可能... []() const {}

•   例外指定も可能... []() throw {}




                            わんくま同盟 東京勉強会 #22
新たな関数宣言構文(戻り値の型を後置)
• 現在
  vector<double> foo();

• 提案1:戻り値の型を後置する関数宣言構文
  auto foo() -> vector<double>;

• 提案2:(ラムダ式と)統一された関数宣言構文
  []foo() -> vector<double>;

戻り値の型を後置できると、引数をdecltypeした型を戻り値の型
にすることができる
ラムダ式と同様に戻り値の型を推論することも検討中

               わんくま同盟 東京勉強会 #22
書ききれなかった言語仕様

•   char16_t/char32_t
•   Alignment
•   union の制限解除
•   Strongly Typed Enums
•   explicit conversion
•   継承コンストラクタ
•   ユーザー定義リテラル
•   60進数リテラル(?)
•   Nested Exception
•   Uniformed initialization
•   etc...

                       わんくま同盟 東京勉強会 #22
まとめ

• C++0x には、プログラミングをより簡単にするため
  の拡張が数多くあります

• 紹介しきれませんでしたが、標準ライブラリもかなり
  強力になっています

• C++0x で遊ぼう!!




           わんくま同盟 東京勉強会 #22
参考サイト
•   C++ Standards Committee Papers
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/

•   Wikipedia(英語)
http://en.wikipedia.org/wiki/C%2B%2B0x

•   Faith and Brave – C++で遊ぼう
http://d.hatena.ne.jp/faith_and_brave/

•   Cry’s Diary
http://d.hatena.ne.jp/Cryolite/


•   ntnekの日記
http://d.hatena.ne.jp/ntnek/


•   かそくそうち
http://d.hatena.ne.jp/y-hamigaki/



                                     わんくま同盟 東京勉強会 #22

Contenu connexe

Tendances

C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!Akihiro Nishimura
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Keisuke Fukuda
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/PrismNaoki Aoyama
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)Akihiko Matuura
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編egtra
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Takashi Hoshino
 
error handling using expected
error handling using expectederror handling using expected
error handling using expectedAkira Takahashi
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 

Tendances (20)

C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
Map
MapMap
Map
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
What is template
What is templateWhat is template
What is template
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
C#6.0の新機能紹介
C#6.0の新機能紹介C#6.0の新機能紹介
C#6.0の新機能紹介
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 

Similaire à C++0x 言語の未来を語る

中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#信之 岩永
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)信之 岩永
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~normalian
 

Similaire à C++0x 言語の未来を語る (20)

中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
C++0x concept
C++0x conceptC++0x concept
C++0x concept
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
C++の復習
C++の復習C++の復習
C++の復習
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
boost tour 1.48.0 all
boost tour 1.48.0 allboost tour 1.48.0 all
boost tour 1.48.0 all
 
Cocoa勉強会201208
Cocoa勉強会201208Cocoa勉強会201208
Cocoa勉強会201208
 
CppCV03
CppCV03CppCV03
CppCV03
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 

Plus de Akira Takahashi (20)

Cpp20 overview language features
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
 
Cppmix 02
Cppmix 02Cppmix 02
Cppmix 02
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
Modern C++ Learning
Modern C++ LearningModern C++ Learning
Modern C++ Learning
 
cpprefjp documentation
cpprefjp documentationcpprefjp documentation
cpprefjp documentation
 
C++1z draft
C++1z draftC++1z draft
C++1z draft
 
Boost tour 1_61_0 merge
Boost tour 1_61_0 mergeBoost tour 1_61_0 merge
Boost tour 1_61_0 merge
 
Boost tour 1_61_0
Boost tour 1_61_0Boost tour 1_61_0
Boost tour 1_61_0
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Boost Tour 1_58_0
Boost Tour 1_58_0Boost Tour 1_58_0
Boost Tour 1_58_0
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Multi paradigm design
Multi paradigm designMulti paradigm design
Multi paradigm design
 
Start Concurrent
Start ConcurrentStart Concurrent
Start Concurrent
 
Programmer mind
Programmer mindProgrammer mind
Programmer mind
 
Boost.Study 14 Opening
Boost.Study 14 OpeningBoost.Study 14 Opening
Boost.Study 14 Opening
 
Executors and schedulers
Executors and schedulersExecutors and schedulers
Executors and schedulers
 

Dernier

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 

Dernier (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 

C++0x 言語の未来を語る

  • 1. C++0x 言語の未来を語る 高橋 晶(アキラ) Blog: Faith and Brave – C++で遊ぼう わんくま同盟 東京勉強会 #22
  • 2. Agenda • What’s C++0x • Angle Bracket • Initializer List • auto • decltype • Delegating Constructor • Extending sizeof • Raw String Literal • Defaulted and Deleted Functions • Member Initializers • nullptr • constexpr • Template Aliases • static_assert • Variadic Templates • Concept • Range-base for loop • RValue Reference・Move Semantics • Lambda Expression • New Function Daclarator Syntax わんくま同盟 東京勉強会 #22
  • 3. What’s C++0x (C++0xってなに?) • C++の次バージョン(現在はC++03) • 「0x」とは200x年の意味で、C++09を目指している (もしかしたら C++10 になっちゃうかも) • エキスパートよりも初心者のための言語拡張を行う わんくま同盟 東京勉強会 #22
  • 4. Angle Bracket(山カッコ) • C++03では以下のコードはコンパイルエラーになる vector<basic_string<char>> v; // エラー! operator>> が使われている • 連続した山カッコがシフト演算子と判断されてしまう • C++0xではこの問題が解決される わんくま同盟 東京勉強会 #22
  • 5. Initializer List(初期化子リスト) • ユーザー定義クラスで配列のような初期化を可能にする • Bjarne氏曰く「何で今までできなかったのかわからない」 • std::initializer_listクラスを使用する // 初期化 vector<int> v = {3, 1, 4}; // 戻り値 vector<int> factory() { return {3, 1, 4}; } // 引数 void foo(const vector<int>& v) {} foo({3, 1, 4}); わんくま同盟 東京勉強会 #22
  • 6. auto • 型推論 • autoキーワードの意味が変更になる(めずらしい) • autoで宣言された変数の型は右辺から導出される vector<int> v; vector<int>::iterator it = v.begin(); // C++03 auto it = v.begin(); // C++0x const/volatile修飾や、参照(&)・ポインタ(*)等を付加することも できる(const auto&, auto*, etc...) わんくま同盟 東京勉強会 #22
  • 7. decltype • 計算結果の型を求めることができる • 他の機能で型を推論に使われたり、インスタンスか らメンバの型を取得したり… int x = 3; decltype(x) y = 0; // int y = 0; decltype(x*) z = &x; // int* z = &x; int foo() { return 0; } decltype(foo()) x = foo(); // int x = foo(); わんくま同盟 東京勉強会 #22
  • 8. Delegating Constructor • 移譲コンストラクタ • コンストラクタ内で、他のコンストラクタを呼べる class widget { int x_, y_, z_; widget(int x, int y, int z) : x_(x), y_(y), z_(z) {} public: widget() : widget(0, 0, 0) {} // widget(int, int, int) }; わんくま同盟 東京勉強会 #22
  • 9. Extending sizeof(拡張sizeof) • インスタンス作成せずにメンバ変数を sizeof できる ようになる struct hoge { int id; }; sizeof(hoge::id); // 今まではできなかった わんくま同盟 東京勉強会 #22
  • 10. Raw String Literal • Rプレフィックスを付加した文字列は エスケープシーケンスを無視するようになる // C++03 string path = “C:¥¥abc”; string data = “Akira¥¥nTakahashi”; wstring wpath = L”C:¥¥abc”; // C++0x string path = R”C:¥abc”; string data = R”Akira¥nTakahashi”; wstring wpath = LR”C:¥abc”; わんくま同盟 東京勉強会 #22
  • 11. Defaulted and Deleted Functions • コンパイラによって自動生成される関数の制御が できるようになる struct hoge { hoge() = default; // コンパイラが自動生成するデフォルトコンストラクタを使う // コピー禁止 hoge(const hoge&) = delete; hoge& operator=(const hoge&) = delete; }; わんくま同盟 東京勉強会 #22
  • 12. Member Initializers(メンバ初期化子) • メンバ変数の宣言時に初期化できるようになる struct hoge { int age = 23; string name(“Akira”); }; • コンストラクタでの初期化子リストが優先される わんくま同盟 東京勉強会 #22
  • 13. nullptr • ヌルポインタを表すキーワード nullptr を追加 • nullptrが導入されれば、0とNULLを非推奨とするこ とができる int* p = nullptr; // C++0x int* p = static_cast<int*>(0); // C++03 int* p = NULL; // C...(void*)0 わんくま同盟 東京勉強会 #22
  • 14. constexpr • 定数式 • コンパイル時に実行される式を作成することができる constexpr int size(int x) { return x * 2; } int ar[size(3)]; // OK...配列のサイズは6 いろいろと制限があるらしい(再帰ができない等...) わんくま同盟 東京勉強会 #22
  • 15. Template Aliases • テンプレートを使用して型の別名を付けることができ るようになる(いわゆる template typedef) template <class T> using Vec = vector<T>; Vec<int> v; • 型を返すメタ関数が書きやすくなる (もしくはいらなくなる) わんくま同盟 東京勉強会 #22
  • 16. static_assert • コンパイル時アサート • 静的な条件と、エラーメッセージを指定する template <class T> void foo(T value) { static_assert(is_integral<T>::value, “not integral”); } foo(3); // OK foo(3.14); // エラー! not integral わんくま同盟 東京勉強会 #22
  • 17. Variadic Templates • 可変引数テンプレート • 基本的に再帰を使って処理する template <class T> void print(T arg) { cout << arg << endl; } template <class Head, class... Tail> void print(Head head, Tail... tail) { cout << head << endl; print(tail...); } print(1, 2, 3, 4, 5, 6, 7); ちなみに、sizeof...(Args); とすると、型の数を取得できる わんくま同盟 東京勉強会 #22
  • 19. Concept definitions • 型に対する要求を定義する 「型Tはxxメンバを持っていなければならない」 「型Tはyy型を持っていなければならない」 concept LessThanComparable<class T> { bool operator<(const T&, const T&); } このコンセプトは、「型Tは operator< を持っていなければならない」 という要求 わんくま同盟 東京勉強会 #22
  • 20. Requirements clauses • 型Tに必要な要求(コンセプト)を指定する template <class T> requires LessThanComparable<T> const T& min(const T& a, const T& b) { return a < b ? a : b; } これにより 「型TはLessThanComparableの要求を満たさなければならない」 といった制約を行うことができる わんくま同盟 東京勉強会 #22
  • 21. ここまででうれしいこと • 人間が読めるコンパイルエラーを出力してくれる list<int> ls; sort(ls.begin(), ls.end()); // エラー! 「第1引数はRandomAccessIteratorの要求を満たしません」 といったエラーメッセージを出力してくれるだろう わんくま同盟 東京勉強会 #22
  • 22. Concept maps その1 • 既存の型がどのようにコンセプトの要求を満たすか を定義する 以下のようなコンセプトとそれを要求する関数があった場合 concept RandomAccessIterator<class T> { typename value_type; typename difference_type; } template <RandomAccessIterator Iterator> void sort(Iterator first, Iterator last) { ... } わんくま同盟 東京勉強会 #22
  • 23. Concept maps その2 以下のような結果になる vector<int> v; sort(v.begin(), v.end()); // OK int ar[] = {3, 1, 4}; sort(ar, ar + 3); // エラー!ポインタはRandomAccessIteratorの要求を満たしません ポインタはランダムアクセスイテレータとして使用できなければならない わんくま同盟 東京勉強会 #22
  • 24. Concept maps その3 • そこで、concept_mapを使用して RandomAccessIteratorコンセプトを特殊化する template <class T> concept_map RandomAccessIterator<T*> { typedef T value_type; typedef ptrdiff_t difference_type; } これにより、ポインタをRandomAccessIteratorとして使える わんくま同盟 東京勉強会 #22
  • 25. Concept mapsがあるとできること • Containerコンセプトを使用することにより 配列をコンテナとして使用することができる template <Container Cont> void sort(Cont& c) { sort(c.begin(), c.end()); } std::vector<int> v; sort(v); // OK int ar[] = {3, 1, 4}; sort(ar); // OK わんくま同盟 東京勉強会 #22
  • 26. 書ききれないコンセプト • Range-baseのアルゴリズムは(まだ?)提供されない • requiresはカンマ区切りで複数指定可能 • late_checkブロックで従来の型チェックも可能 • コンセプトでのオーバーロードも可能 • Scoped Concept Mapsとか・・・ • Axiomとか・・・ • コンセプトは超強力!!! わんくま同盟 東京勉強会 #22
  • 27. Range-base for loop • コレクションを走査するfor文 • std::Rangeコンセプトを使用している vector<int> v; for (const int& item : v) { cout << item << endl; } 初期化子リストを渡すことも可能 for (int item : {3, 1, 4}) { ... } わんくま同盟 東京勉強会 #22
  • 28. 右辺値参照・Move Semantics • 右辺値(一時オブジェクト)はどうせ消えちゃうのだから 内部のメモリを移動しても問題ないでしょ。というもの • 移動された一時オブジェクトは破壊される • 右辺値参照には&&演算子を使用する template <class T> class vector { public: vector(const vector&); // Copy Constructor vector(vector&&); // Move Constructor }; わんくま同盟 東京勉強会 #22
  • 29. 左辺値と右辺値 • 左辺値とは ・名前が付いたオブジェクトを指す • 右辺値とは ・名前がないオブジェクトを指す ・関数の戻り値は、参照やポインタでない限り 右辺値(一時オブジェクト)である わんくま同盟 東京勉強会 #22
  • 30. 右辺値参照を使ってみる 右辺値参照は、使う側はとくに気にする必要がない(ことが多い) vector<int> factory() { vector<int> v; ... return v; } vector<int> v = factory(); // Move Contructor 右辺値参照を使えば大きいオブジェクトを気軽に戻り値にできる わんくま同盟 東京勉強会 #22
  • 31. 右辺値参照のための標準関数 • <utility>にstd::moveとstd::forwardという2つの関数が用意される namespace std { template <class T> struct identity { typedef T type; }; template <class T> inline typename remove_reference<T>::type&& move(T&& x) { return x; } template <class T> inline T&& forward(typename identity<T>::type&& x) { return x; } } ・std::move は左辺値を右辺値に変換する関数 ・std::forward は右辺値を安全に転送する関数 わんくま同盟 東京勉強会 #22
  • 32. 基本的な Move ConstructorとMove Assinmentの書き方 class Derived : public Base { std::vector<int> vec; std::string name; public: // move constructor Derived(Derived&& x) : Base(std::forward<Base>(x)), vec(std::move(x.vec)), name(std::move(x.name)){} // move assignment operator Derived& operator=(Derived&& x) { Base::operator=(std::forward<Base>(x)); vec = std::move(x.vec); name = std::move(x.name); return *this; } }; わんくま同盟 東京勉強会 #22
  • 33. Lambda Expression(ラムダ式) • 匿名関数オブジェクト vector<int> v; find_if(v.begin(), v.end(), [](int x) { return x == 3; }); 以下はラムダ式によって生成される匿名関数オブジェクト(簡易的) struct F { bool operator()(int x) { return x == 3; } }; わんくま同盟 東京勉強会 #22
  • 34. 環境のキャプチャ • デフォルトのキャプチャ方法 vector<int> v; int sum = 0; int rate = 2; for_each(v.begin(), v.end(), [&](int x) { sum += x * rate; }); [&] : デフォルトのキャプチャ方法は参照 [=] : デフォルトのキャプチャ方法はコピー [] : 環境なし • キャプチャリスト(個別指定) for_each(v.begin(), v.end(), [=, &sum] { sum += x * rate; }); デフォルトのキャプチャ方法はコピー、sumは参照でキャプチャ わんくま同盟 東京勉強会 #22
  • 35. 戻り値の型 • ラムダ式の戻り値の型は明示的に指定することもできる [](int x) -> bool { return x == 3; } • 省略した場合は、return文をdecltypeした型が戻り値の型 以下の2つのラムダ式は同じ意味である [](int x) -> decltype(x == 3) { return x == 3; } [](int x) { return x == 3; } return 文を省略した場合、戻り値の型は void になる わんくま同盟 東京勉強会 #22
  • 36. 書ききれなかったラムダ • メンバ関数内でのラムダ式はそのクラスのfriendと見なされ、 privateメンバにアクセスできる • 参照環境のみを持つラムダ式はstd::reference_closureを継承したクラスになる (キャプチャした変数をメンバに持たずにスコープをのぞき見る) • 参照環境のみを持つラムダ式はスコープから外れるとその実行は未定義 (つまり、参照ラムダを戻り値にしてはいけない) • const/volatile修飾も可能... []() const {} • 例外指定も可能... []() throw {} わんくま同盟 東京勉強会 #22
  • 37. 新たな関数宣言構文(戻り値の型を後置) • 現在 vector<double> foo(); • 提案1:戻り値の型を後置する関数宣言構文 auto foo() -> vector<double>; • 提案2:(ラムダ式と)統一された関数宣言構文 []foo() -> vector<double>; 戻り値の型を後置できると、引数をdecltypeした型を戻り値の型 にすることができる ラムダ式と同様に戻り値の型を推論することも検討中 わんくま同盟 東京勉強会 #22
  • 38. 書ききれなかった言語仕様 • char16_t/char32_t • Alignment • union の制限解除 • Strongly Typed Enums • explicit conversion • 継承コンストラクタ • ユーザー定義リテラル • 60進数リテラル(?) • Nested Exception • Uniformed initialization • etc... わんくま同盟 東京勉強会 #22
  • 39. まとめ • C++0x には、プログラミングをより簡単にするため の拡張が数多くあります • 紹介しきれませんでしたが、標準ライブラリもかなり 強力になっています • C++0x で遊ぼう!! わんくま同盟 東京勉強会 #22
  • 40. 参考サイト • C++ Standards Committee Papers http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ • Wikipedia(英語) http://en.wikipedia.org/wiki/C%2B%2B0x • Faith and Brave – C++で遊ぼう http://d.hatena.ne.jp/faith_and_brave/ • Cry’s Diary http://d.hatena.ne.jp/Cryolite/ • ntnekの日記 http://d.hatena.ne.jp/ntnek/ • かそくそうち http://d.hatena.ne.jp/y-hamigaki/ わんくま同盟 東京勉強会 #22