SlideShare a Scribd company logo
C++11 is 䜕?
C++11 でできるこず
.
...... C++11
hatsusato
京郜倧孊理孊郚 1 回
2012 幎 12 月 20 日
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. 自己玹介
@hatsusato のプロフィヌル
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. 自己玹介
@hatsusato のプロフィヌル
C++侀筋
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. 自己玹介
@hatsusato のプロフィヌル
C++侀筋
理孊郚数孊系志望
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. 自己玹介
@hatsusato のプロフィヌル
C++侀筋
理孊郚数孊系志望
倧孊院は情報の流れ濃厚
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. 自己玹介
@hatsusato のプロフィヌル
C++侀筋
理孊郚数孊系志望
倧孊院は情報の流れ濃厚
げんご぀くる
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. 目次
...1 C++11 is 䜕?
...2 C++11 でできるこず
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 is 䜕?
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 is 䜕?
C++11 ずは、2011 幎に暙準化された C++の最新芏栌の
こずである。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 is 䜕?
C++11 ずは、2011 幎に暙準化された C++の最新芏栌の
こずである。
それたでの C++03 ずは比べ物にならないほどたずもに
なった。これで䞀人前の蚀語に。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 is 䜕?
C++11 ずは、2011 幎に暙準化された C++の最新芏栌の
こずである。
それたでの C++03 ずは比べ物にならないほどたずもに
なった。これで䞀人前の蚀語に。
コア蚀語の機胜が拡匵され、今たでに出来なかったり、
面倒くさい遠回りをしお実珟しおいたたくさんのこずが
簡単にできるように。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 is 䜕?
C++11 ずは、2011 幎に暙準化された C++の最新芏栌の
こずである。
それたでの C++03 ずは比べ物にならないほどたずもに
なった。これで䞀人前の蚀語に。
コア蚀語の機胜が拡匵され、今たでに出来なかったり、
面倒くさい遠回りをしお実珟しおいたたくさんのこずが
簡単にできるように。
暙準ラむブラリも倧きく拡充され、たくさんの䟿利なラ
むブラリが簡単に利甚できるように。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 is 䜕?
C++11 ずは、2011 幎に暙準化された C++の最新芏栌の
こずである。
それたでの C++03 ずは比べ物にならないほどたずもに
なった。これで䞀人前の蚀語に。
コア蚀語の機胜が拡匵され、今たでに出来なかったり、
面倒くさい遠回りをしお実珟しおいたたくさんのこずが
簡単にできるように。
暙準ラむブラリも倧きく拡充され、たくさんの䟿利なラ
むブラリが簡単に利甚できるように。
それでいお実行時速床は倉わらないか、むしろ速く
なった。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 is 䜕?
C++11 ずは、2011 幎に暙準化された C++の最新芏栌の
こずである。
それたでの C++03 ずは比べ物にならないほどたずもに
なった。これで䞀人前の蚀語に。
コア蚀語の機胜が拡匵され、今たでに出来なかったり、
面倒くさい遠回りをしお実珟しおいたたくさんのこずが
簡単にできるように。
暙準ラむブラリも倧きく拡充され、たくさんの䟿利なラ
むブラリが簡単に利甚できるように。
それでいお実行時速床は倉わらないか、むしろ速く
なった。
芁するに C++11 最高。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 でできるこず
auto
range-based for
initializer list
nullptr
lambda expression
move semantics
constexpr
useful and powerful libraries
時間の郜合により割愛したす。
and more!
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. auto
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. auto
.
これたで
..
......
for(std :: vector <std ::pair <std:: string ,std :: string > >::
const_iterator it=v.begin (); it!=v.end (); ++it){
// do something.
}
倉数を初期化する際には、必ず倉数の型を明瀺的に指定
する必芁があるが、時には耇雑な型名を曞かなければな
らないこずがある。
特にテンプレヌトが絡むず、右蟺の匏の型がどんな型に
なるのかを知るこずが困難になるこずがある。
しかし、いずれにせよ右蟺の匏の型は䞀意に定たるので
倉数の型は自明である。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. auto
.
これから
..
......
for(auto it=std :: begin(v); it!= std :: end(v); ++it){
// do something.
}
C++は型掚論を手に入れた
コンパむラは右蟺の匏の型を知っおいるので、自動的に
auto を右蟺の匏の型に眮き換えおくれる。
玠人から玄人たで、誰でも簡単に䜿えお誰でも利益を享
受できるので、どんどん䜿いたしょう。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. auto
.
これたで
..
......
for(std :: vector <std ::pair <std:: string ,std :: string > >::
const_iterator it=v.begin (); it!=v.end (); ++it){
// do something.
}
.
これから
..
......
for(auto it=std :: begin(v); it!= std :: end(v); ++it){
// do something.
}
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. range-based for
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. range-based for
.
これたで
..
......
for(std :: vector <std ::string >:: const_iterator vit=v.begin
(); vit !=v.end (); ++vit){
for(std :: string :: const_iterator sit=vit ->begin (); sit!=
vit ->end (); ++ sit ){
// do something.
}
}
コンテナ内の党芁玠を走査するずいったこずは頻繁に起
こるが、そのたびにむテレヌタを䜜る必芁があり、可読
性の䜎いコヌドになっおしたう。
むテレヌタはポむンタのようなものなので、いちいち間
接参照する必芁がある。コンテナのコンテナを走査した
りするず可読性を著しく損なう。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. range-based for
.
これから
..
......
for(auto vx : v){
for(auto sx : vx){
// do something.
}
}
コンテナの党芁玠を走査したい時であれば、いちいちむ
テレヌタを䜜る必芁がなくなった。前述の auto を䜵甚す
るこずでコンテナの芁玠の型を指定する必芁もない。
コンテナの各芁玠を参照で受け取れるので、むテレヌタ
の時ず違っお間接参照する必芁がなく、コンテナのコン
テナの走査も難なく曞ける。
これも簡単に䜿えるのでどんどん䜿いたしょう。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. range-based for
.
これたで
..
......
for(std :: vector <std ::string >:: const_iterator vit=v.begin
(); vit !=v.end (); ++vit){
for(std :: string :: const_iterator sit=vit ->begin (); sit!=
vit ->end (); ++ sit ){
// do something.
}
}
.
これから
..
......
for(auto vx : v){
for(auto sx : vx){
// do something.
}
}
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. initializer list
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. initializer list
.
これたで
..
......
int tmp []={13 ,22 ,37 ,41 ,58};
std :: vector <int > v(tmp ,tmp +5);
// vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 す る 。
v.clear ();
v.push_back (13);
v.push_back (22);
v.push_back (37);
v.push_back (41);
v.push_back (58);
// vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 し な お す 。
コンテナをいく぀かのデヌタで初期化するためには、珟
状では䞊蚘のように䞀時的に配列を䜜ったり、push back
を䞊べたりする必芁があり、可読性があたりよくない。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. initializer list
.
これから
..
......
std :: vector <int > v={13 ,22 ,37 ,41 ,58};
可読性がよい。
埓来の構造䜓や配列の初期化ず同じ構文であり、たた通
垞のコンストラクタも {} で呌び出せるようになったの
で、「初期化は {}、関数呌び出しは ()」ずいうように圹
割分担するこずでコヌドがより明確になる。
倉数の初期化の堎面で {} をどんどん䜿いたしょう。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. initializer list
.
これたで
..
......
int tmp []={13 ,22 ,37 ,41 ,58};
std :: vector <int > v(tmp ,tmp +5);
// vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 す る 。
v.clear ();
v.push_back (13);
v.push_back (22);
v.push_back (37);
v.push_back (41);
v.push_back (58);
// vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 し な お す 。
.
これから
..
......
std :: vector <int > v={13 ,22 ,37 ,41 ,58};
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. nullptr
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. nullptr
.
これたで
..
......
// 関 数 オ ヌ バ ヌ ロ ヌ ド
void f(int ){ std ::cout <<"f(int)"<<std :: endl ;}
void f(int *){ std ::cout <<"f(int *)"<<std :: endl ;}
f(NULL ); // コ ン パ ã‚€ ル ã‚š ラ ヌ  曖 昧 な オ ヌ バ ヌ ロ ヌ ド
そもそも C では
#define NULL ((void*)0)
ずなっおいるが、C++では (void*) から任意のポむンタ
ぞの暗黙倉換ができない。そのため、C++11 以前では
#define NULL 0
ずなっおいた。よっお、NULL を数倀の (int)0 ず解釈す
べきか、ヌルポむンタの (int*)0 ず解釈すべきか曖昧に
なっおしたう。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. nullptr
.
これから
..
......
// 関 数 オ ヌ バ ヌ ロ ヌ ド
void f(int ){ std ::cout <<"f(int)"<<std :: endl ;}
void f(int *){ std ::cout <<"f(int *)"<<std :: endl ;}
f(nullptr ); // > f(int *)
C++11 からは任意のポむンタぞ暗黙倉換可胜な
nullptr t 型のキヌワヌド nullptr が远加され、ややこ
しい問題はなくなった。
もはや NULL を䜿う意味はありたせん。ヌルポむンタを䜿
いたいずころには nullptr を䜿いたしょう。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. nullptr
.
関数定矩
..
......
// 関 数 オ ヌ バ ヌ ロ ヌ ド
void f(int ){ std ::cout <<"f(int)"<<std :: endl ;}
void f(int *){ std ::cout <<"f(int *)"<<std :: endl ;}
.
これたで
..
......
f(NULL ); // コ ン パ ã‚€ ル ã‚š ラ ヌ  曖 昧 な オ ヌ バ ヌ ロ ヌ ド
.
これから
..
......
f(nullptr ); // > f(int *)
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. lambda expression
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. lambda expression
.
これたで
..
......
struct AbsoluteLess {
bool operator ()( int lhs , int rhs){
return std :: abs(lhs)<std :: abs(rhs );
}
};
std :: sort(v.begin (), v.end(), AbsoluteLess ());
// 絶 察 倀 の 倧 小 で ã‚œ ヌ ト
C++11 以前はアルゎリズムごずに関数や関数オブゞェク
トを䜜る必芁があった。たずえ䞀床きりしか䜿わないア
ルゎリズムであっおもいちいち関数オブゞェクトを
䜜っおいたが、この方法は蚘述量が倚く、コヌドの流れ
がわかりづらい。たた、名前空間䞭に䜙分な名前があふ
れるこずに぀ながる。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. lambda expression
.
これから
..
......
std :: sort(std :: begin(v), std ::end(v),
[]( int lhs , int rhs)->bool
{return std ::abs(lhs)<std:: abs(rhs );});
ラムダ匏の登堎により、アルゎリズムを衚す関数オブ
ゞェクトを䜜る代わりにラムダ匏぀たり無名関数オ
ブゞェクトで代甚できるようになった。これにより䜙
分な名前が名前空間にはびこるこずなくコヌドをすっき
りず曞くこずができるようになった。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. lambda expression
.
これたで
..
......
struct AbsoluteLess {
bool operator ()( int lhs , int rhs){
return std :: abs(lhs)<std :: abs(rhs );
}
};
std :: sort(v.begin (), v.end(), AbsoluteLess ());
// 絶 察 倀 の 倧 小 で ã‚œ ヌ ト
.
これから
..
......
std :: sort(std :: begin(v), std ::end(v),
[]( int lhs , int rhs)->bool
{return std ::abs(lhs)<std:: abs(rhs );});
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. move semantics
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. move semantics
.
MyString クラス
..
......
class MyString{
char* _data;
size_t _size;
public:
MyString(const MyString& str) // copy constructor
:_data(new char[str._size ]), _size(str._size ){
std:: copy(str._data , str._data+_size , _data );
}
MyString(MyString && str) // move constructor
:_data(str._data), _size(str._size ){
str._data=nullptr;
str._size =0;
}
// other functions ...
};
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. move semantics
.
これたで
..
......
MyString :: MyString(const MyString& str)
:_data(new char[str._size ]), _size(str._size ){
std :: copy(str._data , str._data+_size , _data );
}
C++11 以前はデヌタの耇補を䜜る際には、いたる所でコ
ピヌが行われおいた。それが圓たり前だった。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. move semantics
.
これから
..
......
MyString :: MyString(MyString && str)
:_data(str._data), _size(str._size ){
str._data=nullptr;
str._size =0;
}
C++11 では右蟺倀参照ずいう抂念が远加され、より効率
のよいデヌタの耇補方法が提䟛されるようになった。
関数の戻り倀などの、代入するこずのできないオブゞェ
クトを右蟺倀ず呌ぶ。move ずは右蟺倀を耇補する際に
コピヌをせず、ポむンタの付け替えなどによっおデヌタ
を移譲する技術のこずである。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. move semantics
.
これから
..
......
MyString :: MyString(MyString && str)
:_data(str._data), _size(str._size ){
str._data=nullptr;
str._size =0;
}
move は䞻にナヌザコヌド偎ではなくラむブラリ提䟛偎
が利甚する技術なので、ナヌザコヌドを特に倉曎するこ
ずなく恩恵を受けられる。
STL などの右蟺倀参照に察応したラむブラリを甚いた
コヌドの実行時速床が、C++11 ずしおコンパむルするだ
けで、知らず知らずのうちに向䞊する。
move semantics 玠晎らしい。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. constexpr
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. constexpr
.
これたで
..
......
#define CUBE(x) (x*x*x)
#define SIDE_SIZE (10)
#define ARRAY_SIZE (CUBE(SIDE_SIZE ))
double array[ARRAY_SIZE ]; // 10^3 個 の 倀 を æ Œ 玍 す る 配 列
C++11 以前は、配列の芁玠数ずしお䜿えるのは、敎数定
数たたは敎数定数で初期化された const な倉数ず敎数定
数で#define したシンボルのみであった。
定数から蚈算しお埗られる結果は定数では無いので、そ
の結果を const 倉数に代入しおも、配列の芁玠数ずしお
は䜿えない。
かわりに䞊蚘のようにしお衚珟するこずは出来るが、
#define は型安党では無いので、C++においお䜿うのは
できるだけ避けるべきである。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. constexpr
.
これから
..
......
constexpr int Cube(int x){ return x*x*x;}
constexpr int SIDE_SIZE =10;
constexpr int ARRAY_SIZE=Cube(SIDE_SIZE );
double array[ARRAY_SIZE ]; // 10^3 個 の 倀 を æ Œ 玍 す る 配 列
C++11 から constexpr ずいうキヌワヌドが远加され、コ
ンパむル時定数ずコンパむル時関数を定矩するこずがで
きるようになった。
コンパむル時定数にはコンパむル時に決定可胜な倀を指
定するこずができ、コンパむル時にその倀に眮き換えら
れる。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. constexpr
.
これから
..
......
constexpr int Cube(int x){ return x*x*x;}
constexpr int SIDE_SIZE =10;
constexpr int ARRAY_SIZE=Cube(SIDE_SIZE );
double array[ARRAY_SIZE ]; // 10^3 個 の 倀 を æ Œ 玍 す る 配 列
コンパむル時関数は関数内で蚘述できる凊理が制限され
おいるものの、党おの匕数がコンパむル時定数ならば戻
り倀がコンパむル時に蚈算され、コンパむル時定数や
const 定数の初期化に䜿うこずができる。匕数の䞀郚が
実行時に決定される堎合は、コンパむル゚ラヌになるこ
ずなく、実行時に蚈算される。
䞊蚘のようにコンパむル時関数には戻り倀の型があり、
型安党である。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. 䟿利なラむブラリ矀
スマヌトポむンタ (shared ptr, weak ptr, unique ptr)
擬䌌乱数生成 (メルセンヌツむスタなど)
正芏衚珟
ハッシュ衚 (unordered map, unordered set)
スレッドラむブラリ
その他たくさんの䟿利機胜远加修正
たたの機䌚に。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 の利甚方法
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 の利甚方法
C++11 は぀い最近確定したばかりの巚倧な芏栌なので、
C++11 察応したコンパむラはただ少ないのが珟状です。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 の利甚方法
C++11 は぀い最近確定したばかりの巚倧な芏栌なので、
C++11 察応したコンパむラはただ少ないのが珟状です。
䟋えば gcc では、gcc4.3 以降で-std=c++11 オプション
-std=c++11 の c は小文字なので泚意を指定するこず
で C++11 のコヌドずしおコンパむルできるようになっお
いたす。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 の利甚方法
C++11 は぀い最近確定したばかりの巚倧な芏栌なので、
C++11 察応したコンパむラはただ少ないのが珟状です。
䟋えば gcc では、gcc4.3 以降で-std=c++11 オプション
-std=c++11 の c は小文字なので泚意を指定するこず
で C++11 のコヌドずしおコンパむルできるようになっお
いたす。
ちなみに今回のスラむドのコヌドスニペットは gcc
version 4.7.2 で実行確認したした。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. C++11 の利甚方法
C++11 は぀い最近確定したばかりの巚倧な芏栌なので、
C++11 察応したコンパむラはただ少ないのが珟状です。
䟋えば gcc では、gcc4.3 以降で-std=c++11 オプション
-std=c++11 の c は小文字なので泚意を指定するこず
で C++11 のコヌドずしおコンパむルできるようになっお
いたす。
ちなみに今回のスラむドのコヌドスニペットは gcc
version 4.7.2 で実行確認したした。
もはや C++03 でコヌドを曞くこずは倧きな損倱に他なり
たせん。これから C++を䜿うずきは是非 C++11 を䜿い
たしょう。
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. たずめ
C++11 は曞きやすく、読みやすく、たた速いコヌドを簡
単に曞くこずができる玠晎らしい
hatsusato C++11
C++11 is 䜕?
C++11 でできるこず
.. èš‚æ­£
//do something. の郚分で v に察しお倉曎を加えないのであ
れば、auto ではなくお、const auto であるべき。
.
auto
..
......
for(const auto it=std:: begin(v); it!=std:: end(v); ++it){
// do something.
}
.
range-based for
..
......
for(const auto& vx : v){
for(const auto& sx : vx){
// do something.
}
}
hatsusato C++11

More Related Content

What's hot

Boost.勉匷䌚#19東京 Effective Modern C++ずC++ Core Guidelines
Boost.勉匷䌚#19東京 Effective Modern C++ずC++ Core GuidelinesBoost.勉匷䌚#19東京 Effective Modern C++ずC++ Core Guidelines
Boost.勉匷䌚#19東京 Effective Modern C++ずC++ Core Guidelines
Shintarou Okada
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
MITSUNARI Shigeo
 
C++入門?
C++入門?C++入門?
C++入門?
tsudaa
 
BoostAsioで可読性を求めるのは間違っおいるだろうか
BoostAsioで可読性を求めるのは間違っおいるだろうかBoostAsioで可読性を求めるのは間違っおいるだろうか
BoostAsioで可読性を求めるのは間違っおいるだろうか
Yuki Miyatake
 
T69 c++cli ネむティブラむブラリラッピング入門
T69 c++cli ネむティブラむブラリラッピング入門T69 c++cli ネむティブラむブラリラッピング入門
T69 c++cli ネむティブラむブラリラッピング入門䌞男 䌊藀
 
ゲヌム開発者のための C++11/C++14
ゲヌム開発者のための C++11/C++14ゲヌム開発者のための C++11/C++14
ゲヌム開発者のための C++11/C++14
Ryo Suzuki
 
競技プログラミングにおけるコヌドの曞き方ずその利䟿性
競技プログラミングにおけるコヌドの曞き方ずその利䟿性競技プログラミングにおけるコヌドの曞き方ずその利䟿性
競技プログラミングにおけるコヌドの曞き方ずその利䟿性
Hibiki Yamashiro
 
C++ tips4 cv修食線
C++ tips4 cv修食線C++ tips4 cv修食線
C++ tips4 cv修食線
道化垫 堂華
 
C++0x総埩習
C++0x総埩習C++0x総埩習
C++0x総埩習
道化垫 堂華
 
C++コンパむラ GCCずClangからのメッセヌゞをお読みください
C++コンパむラ GCCずClangからのメッセヌゞをお読みくださいC++コンパむラ GCCずClangからのメッセヌゞをお読みください
C++コンパむラ GCCずClangからのメッセヌゞをお読みくださいdigitalghost
 
Emcpp item31
Emcpp item31Emcpp item31
Emcpp item31
mitsutaka_takeda
 
新しい䞊列for構文のご提案
新しい䞊列for構文のご提案新しい䞊列for構文のご提案
新しい䞊列for構文のご提案
yohhoy
 
C++ tips1 #includeç·š
C++ tips1 #includeç·šC++ tips1 #includeç·š
C++ tips1 #includeç·š
道化垫 堂華
 
ナりなダングにバカうけのむカしたタグ付き共甚䜓
ナりなダングにバカうけのむカしたタグ付き共甚䜓ナりなダングにバカうけのむカしたタグ付き共甚䜓
ナりなダングにバカうけのむカしたタグ付き共甚䜓
digitalghost
 
C++でHello worldを曞いおみた
C++でHello worldを曞いおみたC++でHello worldを曞いおみた
C++でHello worldを曞いおみた
firewood
 
C++ tips 3 カンマ挔算子線
C++ tips 3 カンマ挔算子線C++ tips 3 カンマ挔算子線
C++ tips 3 カンマ挔算子線
道化垫 堂華
 
C++ lecture-2
C++ lecture-2C++ lecture-2
C++ lecture-2sunaemon
 
゚ラヌハンドリング
゚ラヌハンドリング゚ラヌハンドリング
゚ラヌハンドリング
道化垫 堂華
 

What's hot (20)

Boost.勉匷䌚#19東京 Effective Modern C++ずC++ Core Guidelines
Boost.勉匷䌚#19東京 Effective Modern C++ずC++ Core GuidelinesBoost.勉匷䌚#19東京 Effective Modern C++ずC++ Core Guidelines
Boost.勉匷䌚#19東京 Effective Modern C++ずC++ Core Guidelines
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
C++入門?
C++入門?C++入門?
C++入門?
 
BoostAsioで可読性を求めるのは間違っおいるだろうか
BoostAsioで可読性を求めるのは間違っおいるだろうかBoostAsioで可読性を求めるのは間違っおいるだろうか
BoostAsioで可読性を求めるのは間違っおいるだろうか
 
T69 c++cli ネむティブラむブラリラッピング入門
T69 c++cli ネむティブラむブラリラッピング入門T69 c++cli ネむティブラむブラリラッピング入門
T69 c++cli ネむティブラむブラリラッピング入門
 
ゲヌム開発者のための C++11/C++14
ゲヌム開発者のための C++11/C++14ゲヌム開発者のための C++11/C++14
ゲヌム開発者のための C++11/C++14
 
競技プログラミングにおけるコヌドの曞き方ずその利䟿性
競技プログラミングにおけるコヌドの曞き方ずその利䟿性競技プログラミングにおけるコヌドの曞き方ずその利䟿性
競技プログラミングにおけるコヌドの曞き方ずその利䟿性
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
C++ tips4 cv修食線
C++ tips4 cv修食線C++ tips4 cv修食線
C++ tips4 cv修食線
 
C++0x総埩習
C++0x総埩習C++0x総埩習
C++0x総埩習
 
C++コンパむラ GCCずClangからのメッセヌゞをお読みください
C++コンパむラ GCCずClangからのメッセヌゞをお読みくださいC++コンパむラ GCCずClangからのメッセヌゞをお読みください
C++コンパむラ GCCずClangからのメッセヌゞをお読みください
 
Emcpp item31
Emcpp item31Emcpp item31
Emcpp item31
 
新しい䞊列for構文のご提案
新しい䞊列for構文のご提案新しい䞊列for構文のご提案
新しい䞊列for構文のご提案
 
C++ tips1 #includeç·š
C++ tips1 #includeç·šC++ tips1 #includeç·š
C++ tips1 #includeç·š
 
ナりなダングにバカうけのむカしたタグ付き共甚䜓
ナりなダングにバカうけのむカしたタグ付き共甚䜓ナりなダングにバカうけのむカしたタグ付き共甚䜓
ナりなダングにバカうけのむカしたタグ付き共甚䜓
 
Map
MapMap
Map
 
C++でHello worldを曞いおみた
C++でHello worldを曞いおみたC++でHello worldを曞いおみた
C++でHello worldを曞いおみた
 
C++ tips 3 カンマ挔算子線
C++ tips 3 カンマ挔算子線C++ tips 3 カンマ挔算子線
C++ tips 3 カンマ挔算子線
 
C++ lecture-2
C++ lecture-2C++ lecture-2
C++ lecture-2
 
゚ラヌハンドリング
゚ラヌハンドリング゚ラヌハンドリング
゚ラヌハンドリング
 

Similar to C++11

ぱっず芋でわかるC++11
ぱっず芋でわかるC++11ぱっず芋でわかるC++11
ぱっず芋でわかるC++11えぎ 穏田
 
Move semantics
Move semanticsMove semantics
Move semantics
mitsutaka_takeda
 
クロヌゞャデザむンパタヌン
クロヌゞャデザむンパタヌンクロヌゞャデザむンパタヌン
クロヌゞャデザむンパタヌン
Moriharu Ohzu
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩氞
 
みんな倧奜き! Hello, World
みんな倧奜き! Hello, Worldみんな倧奜き! Hello, World
みんな倧奜き! Hello, WorldNaohiro Aota
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
yak1ex
 
C++11ずゲヌム補䜜
C++11ずゲヌム補䜜C++11ずゲヌム補䜜
C++11ずゲヌム補䜜
uchan_nos
 
C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0sunaemon
 
20分くらいでわかった気分になれるC++20コルヌチン
20分くらいでわかった気分になれるC++20コルヌチン20分くらいでわかった気分になれるC++20コルヌチン
20分くらいでわかった気分になれるC++20コルヌチン
yohhoy
 
C#6.0の新機胜玹介
C#6.0の新機胜玹介C#6.0の新機胜玹介
C#6.0の新機胜玹介
Kazunori Hamamoto
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
yak1ex
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICL
yak1ex
 
わんくた同盟倧阪勉匷䌚#61
わんくた同盟倧阪勉匷䌚#61わんくた同盟倧阪勉匷䌚#61
わんくた同盟倧阪勉匷䌚#61
TATSUYA HAYAMIZU
 
NumPyが物足りない人ぞのCython入門
NumPyが物足りない人ぞのCython入門NumPyが物足りない人ぞのCython入門
NumPyが物足りない人ぞのCython入門
Shiqiao Du
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
Atsuo Ishimoto
 
Rubyの拡匵をCrystalで曞いおみる
Rubyの拡匵をCrystalで曞いおみるRubyの拡匵をCrystalで曞いおみる
Rubyの拡匵をCrystalで曞いおみる
5t111111
 
むチからはじめるLuarida-マむコン
むチからはじめるLuarida-マむコンむチからはじめるLuarida-マむコン
むチからはじめるLuarida-マむコン
䞉䞃男 山本
 
SwiftでRiemann球面を扱う
SwiftでRiemann球面を扱うSwiftでRiemann球面を扱う
SwiftでRiemann球面を扱う
hayato iida
 
C++ lecture-1
C++ lecture-1C++ lecture-1
C++ lecture-1sunaemon
 

Similar to C++11 (20)

ぱっず芋でわかるC++11
ぱっず芋でわかるC++11ぱっず芋でわかるC++11
ぱっず芋でわかるC++11
 
Move semantics
Move semanticsMove semantics
Move semantics
 
クロヌゞャデザむンパタヌン
クロヌゞャデザむンパタヌンクロヌゞャデザむンパタヌン
クロヌゞャデザむンパタヌン
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
みんな倧奜き! Hello, World
みんな倧奜き! Hello, Worldみんな倧奜き! Hello, World
みんな倧奜き! Hello, World
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
C++11ずゲヌム補䜜
C++11ずゲヌム補䜜C++11ずゲヌム補䜜
C++11ずゲヌム補䜜
 
C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0
 
20分くらいでわかった気分になれるC++20コルヌチン
20分くらいでわかった気分になれるC++20コルヌチン20分くらいでわかった気分になれるC++20コルヌチン
20分くらいでわかった気分になれるC++20コルヌチン
 
C#6.0の新機胜玹介
C#6.0の新機胜玹介C#6.0の新機胜玹介
C#6.0の新機胜玹介
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICL
 
わんくた同盟倧阪勉匷䌚#61
わんくた同盟倧阪勉匷䌚#61わんくた同盟倧阪勉匷䌚#61
わんくた同盟倧阪勉匷䌚#61
 
NumPyが物足りない人ぞのCython入門
NumPyが物足りない人ぞのCython入門NumPyが物足りない人ぞのCython入門
NumPyが物足りない人ぞのCython入門
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
Rubyの拡匵をCrystalで曞いおみる
Rubyの拡匵をCrystalで曞いおみるRubyの拡匵をCrystalで曞いおみる
Rubyの拡匵をCrystalで曞いおみる
 
むチからはじめるLuarida-マむコン
むチからはじめるLuarida-マむコンむチからはじめるLuarida-マむコン
むチからはじめるLuarida-マむコン
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
SwiftでRiemann球面を扱う
SwiftでRiemann球面を扱うSwiftでRiemann球面を扱う
SwiftでRiemann球面を扱う
 
C++ lecture-1
C++ lecture-1C++ lecture-1
C++ lecture-1
 

More from 京倧 マむコンクラブ

テキストファむルを読む💪 第1回
テキストファむルを読む💪  第1回テキストファむルを読む💪  第1回
テキストファむルを読む💪 第1回
京倧 マむコンクラブ
 
かわいくなろうずしたら語圙力が䞋がった話
かわいくなろうずしたら語圙力が䞋がった話かわいくなろうずしたら語圙力が䞋がった話
かわいくなろうずしたら語圙力が䞋がった話
京倧 マむコンクラブ
 
Common Lisp入門
Common Lisp入門Common Lisp入門
倚倍長敎数の乗算ず高速フヌリ゚倉換
倚倍長敎数の乗算ず高速フヌリ゚倉換倚倍長敎数の乗算ず高速フヌリ゚倉換
倚倍長敎数の乗算ず高速フヌリ゚倉換
京倧 マむコンクラブ
 
぀くっおあそが ラムダ蚈算むンタプリタ
぀くっおあそが ラムダ蚈算むンタプリタ぀くっおあそが ラムダ蚈算むンタプリタ
぀くっおあそが ラムダ蚈算むンタプリタ
京倧 マむコンクラブ
 
セミコロンレスc++
セミコロンレスc++セミコロンレスc++
セミコロンレスc++
京倧 マむコンクラブ
 
゚ンゞニアず健康
゚ンゞニアず健康゚ンゞニアず健康
゚ンゞニアず健康
京倧 マむコンクラブ
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
京倧 マむコンクラブ
 
Pietで競プロしよう
Pietで競プロしようPietで競プロしよう
Pietで競プロしよう
京倧 マむコンクラブ
 
もし倪陜のコアがIntelCoreだったら
もし倪陜のコアがIntelCoreだったらもし倪陜のコアがIntelCoreだったら
もし倪陜のコアがIntelCoreだったら
京倧 マむコンクラブ
 
C# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいの
C# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいのC# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいの
C# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいの
京倧 マむコンクラブ
 
プログラムを高速化する話Ⅱ 〜GPGPU線〜
プログラムを高速化する話Ⅱ 〜GPGPU線〜プログラムを高速化する話Ⅱ 〜GPGPU線〜
プログラムを高速化する話Ⅱ 〜GPGPU線〜
京倧 マむコンクラブ
 
ドット絵でプログラミング難解蚀語『Piet』勉匷䌚
ドット絵でプログラミング難解蚀語『Piet』勉匷䌚ドット絵でプログラミング難解蚀語『Piet』勉匷䌚
ドット絵でプログラミング難解蚀語『Piet』勉匷䌚
京倧 マむコンクラブ
 
No SSH (@nojima; KMC関東䟋䌚)
No SSH (@nojima; KMC関東䟋䌚)No SSH (@nojima; KMC関東䟋䌚)
No SSH (@nojima; KMC関東䟋䌚)
京倧 マむコンクラブ
 
DTM緎習䌚2017第1.5回 「䌎奏の付け方」
DTM緎習䌚2017第1.5回 「䌎奏の付け方」DTM緎習䌚2017第1.5回 「䌎奏の付け方」
DTM緎習䌚2017第1.5回 「䌎奏の付け方」
京倧 マむコンクラブ
 
hideya流 テストプレむ芳察術
hideya流 テストプレむ芳察術hideya流 テストプレむ芳察術
hideya流 テストプレむ芳察術
京倧 マむコンクラブ
 
暗号技術入門 秘密の囜のアリス 総集線
暗号技術入門 秘密の囜のアリス 総集線暗号技術入門 秘密の囜のアリス 総集線
暗号技術入門 秘密の囜のアリス 総集線
京倧 マむコンクラブ
 
Altseed
AltseedAltseed
C#でゲヌムを䜜る2016 第8回
C#でゲヌムを䜜る2016 第8回C#でゲヌムを䜜る2016 第8回
C#でゲヌムを䜜る2016 第8回
京倧 マむコンクラブ
 

More from 京倧 マむコンクラブ (20)

テキストファむルを読む💪 第1回
テキストファむルを読む💪  第1回テキストファむルを読む💪  第1回
テキストファむルを読む💪 第1回
 
かわいくなろうずしたら語圙力が䞋がった話
かわいくなろうずしたら語圙力が䞋がった話かわいくなろうずしたら語圙力が䞋がった話
かわいくなろうずしたら語圙力が䞋がった話
 
Common Lisp入門
Common Lisp入門Common Lisp入門
Common Lisp入門
 
倚倍長敎数の乗算ず高速フヌリ゚倉換
倚倍長敎数の乗算ず高速フヌリ゚倉換倚倍長敎数の乗算ず高速フヌリ゚倉換
倚倍長敎数の乗算ず高速フヌリ゚倉換
 
぀くっおあそが ラムダ蚈算むンタプリタ
぀くっおあそが ラムダ蚈算むンタプリタ぀くっおあそが ラムダ蚈算むンタプリタ
぀くっおあそが ラムダ蚈算むンタプリタ
 
Geometry with Unity
Geometry with UnityGeometry with Unity
Geometry with Unity
 
セミコロンレスc++
セミコロンレスc++セミコロンレスc++
セミコロンレスc++
 
゚ンゞニアず健康
゚ンゞニアず健康゚ンゞニアず健康
゚ンゞニアず健康
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
 
Pietで競プロしよう
Pietで競プロしようPietで競プロしよう
Pietで競プロしよう
 
もし倪陜のコアがIntelCoreだったら
もし倪陜のコアがIntelCoreだったらもし倪陜のコアがIntelCoreだったら
もし倪陜のコアがIntelCoreだったら
 
C# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいの
C# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいのC# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいの
C# ゲヌムプログラミングはホントにメモリのこずに無頓着でいいの
 
プログラムを高速化する話Ⅱ 〜GPGPU線〜
プログラムを高速化する話Ⅱ 〜GPGPU線〜プログラムを高速化する話Ⅱ 〜GPGPU線〜
プログラムを高速化する話Ⅱ 〜GPGPU線〜
 
ドット絵でプログラミング難解蚀語『Piet』勉匷䌚
ドット絵でプログラミング難解蚀語『Piet』勉匷䌚ドット絵でプログラミング難解蚀語『Piet』勉匷䌚
ドット絵でプログラミング難解蚀語『Piet』勉匷䌚
 
No SSH (@nojima; KMC関東䟋䌚)
No SSH (@nojima; KMC関東䟋䌚)No SSH (@nojima; KMC関東䟋䌚)
No SSH (@nojima; KMC関東䟋䌚)
 
DTM緎習䌚2017第1.5回 「䌎奏の付け方」
DTM緎習䌚2017第1.5回 「䌎奏の付け方」DTM緎習䌚2017第1.5回 「䌎奏の付け方」
DTM緎習䌚2017第1.5回 「䌎奏の付け方」
 
hideya流 テストプレむ芳察術
hideya流 テストプレむ芳察術hideya流 テストプレむ芳察術
hideya流 テストプレむ芳察術
 
暗号技術入門 秘密の囜のアリス 総集線
暗号技術入門 秘密の囜のアリス 総集線暗号技術入門 秘密の囜のアリス 総集線
暗号技術入門 秘密の囜のアリス 総集線
 
Altseed
AltseedAltseed
Altseed
 
C#でゲヌムを䜜る2016 第8回
C#でゲヌムを䜜る2016 第8回C#でゲヌムを䜜る2016 第8回
C#でゲヌムを䜜る2016 第8回
 

C++11

  • 1. C++11 is 䜕? C++11 でできるこず . ...... C++11 hatsusato 京郜倧孊理孊郚 1 回 2012 幎 12 月 20 日 hatsusato C++11
  • 2. C++11 is 䜕? C++11 でできるこず .. 自己玹介 @hatsusato のプロフィヌル hatsusato C++11
  • 3. C++11 is 䜕? C++11 でできるこず .. 自己玹介 @hatsusato のプロフィヌル C++侀筋 hatsusato C++11
  • 4. C++11 is 䜕? C++11 でできるこず .. 自己玹介 @hatsusato のプロフィヌル C++侀筋 理孊郚数孊系志望 hatsusato C++11
  • 5. C++11 is 䜕? C++11 でできるこず .. 自己玹介 @hatsusato のプロフィヌル C++侀筋 理孊郚数孊系志望 倧孊院は情報の流れ濃厚 hatsusato C++11
  • 6. C++11 is 䜕? C++11 でできるこず .. 自己玹介 @hatsusato のプロフィヌル C++侀筋 理孊郚数孊系志望 倧孊院は情報の流れ濃厚 げんご぀くる hatsusato C++11
  • 7. C++11 is 䜕? C++11 でできるこず .. 目次 ...1 C++11 is 䜕? ...2 C++11 でできるこず hatsusato C++11
  • 8. C++11 is 䜕? C++11 でできるこず .. C++11 is 䜕? hatsusato C++11
  • 9. C++11 is 䜕? C++11 でできるこず .. C++11 is 䜕? C++11 ずは、2011 幎に暙準化された C++の最新芏栌の こずである。 hatsusato C++11
  • 10. C++11 is 䜕? C++11 でできるこず .. C++11 is 䜕? C++11 ずは、2011 幎に暙準化された C++の最新芏栌の こずである。 それたでの C++03 ずは比べ物にならないほどたずもに なった。これで䞀人前の蚀語に。 hatsusato C++11
  • 11. C++11 is 䜕? C++11 でできるこず .. C++11 is 䜕? C++11 ずは、2011 幎に暙準化された C++の最新芏栌の こずである。 それたでの C++03 ずは比べ物にならないほどたずもに なった。これで䞀人前の蚀語に。 コア蚀語の機胜が拡匵され、今たでに出来なかったり、 面倒くさい遠回りをしお実珟しおいたたくさんのこずが 簡単にできるように。 hatsusato C++11
  • 12. C++11 is 䜕? C++11 でできるこず .. C++11 is 䜕? C++11 ずは、2011 幎に暙準化された C++の最新芏栌の こずである。 それたでの C++03 ずは比べ物にならないほどたずもに なった。これで䞀人前の蚀語に。 コア蚀語の機胜が拡匵され、今たでに出来なかったり、 面倒くさい遠回りをしお実珟しおいたたくさんのこずが 簡単にできるように。 暙準ラむブラリも倧きく拡充され、たくさんの䟿利なラ むブラリが簡単に利甚できるように。 hatsusato C++11
  • 13. C++11 is 䜕? C++11 でできるこず .. C++11 is 䜕? C++11 ずは、2011 幎に暙準化された C++の最新芏栌の こずである。 それたでの C++03 ずは比べ物にならないほどたずもに なった。これで䞀人前の蚀語に。 コア蚀語の機胜が拡匵され、今たでに出来なかったり、 面倒くさい遠回りをしお実珟しおいたたくさんのこずが 簡単にできるように。 暙準ラむブラリも倧きく拡充され、たくさんの䟿利なラ むブラリが簡単に利甚できるように。 それでいお実行時速床は倉わらないか、むしろ速く なった。 hatsusato C++11
  • 14. C++11 is 䜕? C++11 でできるこず .. C++11 is 䜕? C++11 ずは、2011 幎に暙準化された C++の最新芏栌の こずである。 それたでの C++03 ずは比べ物にならないほどたずもに なった。これで䞀人前の蚀語に。 コア蚀語の機胜が拡匵され、今たでに出来なかったり、 面倒くさい遠回りをしお実珟しおいたたくさんのこずが 簡単にできるように。 暙準ラむブラリも倧きく拡充され、たくさんの䟿利なラ むブラリが簡単に利甚できるように。 それでいお実行時速床は倉わらないか、むしろ速く なった。 芁するに C++11 最高。 hatsusato C++11
  • 15. C++11 is 䜕? C++11 でできるこず .. C++11 でできるこず auto range-based for initializer list nullptr lambda expression move semantics constexpr useful and powerful libraries 時間の郜合により割愛したす。 and more! hatsusato C++11
  • 16. C++11 is 䜕? C++11 でできるこず .. auto hatsusato C++11
  • 17. C++11 is 䜕? C++11 でできるこず .. auto . これたで .. ...... for(std :: vector <std ::pair <std:: string ,std :: string > >:: const_iterator it=v.begin (); it!=v.end (); ++it){ // do something. } 倉数を初期化する際には、必ず倉数の型を明瀺的に指定 する必芁があるが、時には耇雑な型名を曞かなければな らないこずがある。 特にテンプレヌトが絡むず、右蟺の匏の型がどんな型に なるのかを知るこずが困難になるこずがある。 しかし、いずれにせよ右蟺の匏の型は䞀意に定たるので 倉数の型は自明である。 hatsusato C++11
  • 18. C++11 is 䜕? C++11 でできるこず .. auto . これから .. ...... for(auto it=std :: begin(v); it!= std :: end(v); ++it){ // do something. } C++は型掚論を手に入れた コンパむラは右蟺の匏の型を知っおいるので、自動的に auto を右蟺の匏の型に眮き換えおくれる。 玠人から玄人たで、誰でも簡単に䜿えお誰でも利益を享 受できるので、どんどん䜿いたしょう。 hatsusato C++11
  • 19. C++11 is 䜕? C++11 でできるこず .. auto . これたで .. ...... for(std :: vector <std ::pair <std:: string ,std :: string > >:: const_iterator it=v.begin (); it!=v.end (); ++it){ // do something. } . これから .. ...... for(auto it=std :: begin(v); it!= std :: end(v); ++it){ // do something. } hatsusato C++11
  • 20. C++11 is 䜕? C++11 でできるこず .. range-based for hatsusato C++11
  • 21. C++11 is 䜕? C++11 でできるこず .. range-based for . これたで .. ...... for(std :: vector <std ::string >:: const_iterator vit=v.begin (); vit !=v.end (); ++vit){ for(std :: string :: const_iterator sit=vit ->begin (); sit!= vit ->end (); ++ sit ){ // do something. } } コンテナ内の党芁玠を走査するずいったこずは頻繁に起 こるが、そのたびにむテレヌタを䜜る必芁があり、可読 性の䜎いコヌドになっおしたう。 むテレヌタはポむンタのようなものなので、いちいち間 接参照する必芁がある。コンテナのコンテナを走査した りするず可読性を著しく損なう。 hatsusato C++11
  • 22. C++11 is 䜕? C++11 でできるこず .. range-based for . これから .. ...... for(auto vx : v){ for(auto sx : vx){ // do something. } } コンテナの党芁玠を走査したい時であれば、いちいちむ テレヌタを䜜る必芁がなくなった。前述の auto を䜵甚す るこずでコンテナの芁玠の型を指定する必芁もない。 コンテナの各芁玠を参照で受け取れるので、むテレヌタ の時ず違っお間接参照する必芁がなく、コンテナのコン テナの走査も難なく曞ける。 これも簡単に䜿えるのでどんどん䜿いたしょう。 hatsusato C++11
  • 23. C++11 is 䜕? C++11 でできるこず .. range-based for . これたで .. ...... for(std :: vector <std ::string >:: const_iterator vit=v.begin (); vit !=v.end (); ++vit){ for(std :: string :: const_iterator sit=vit ->begin (); sit!= vit ->end (); ++ sit ){ // do something. } } . これから .. ...... for(auto vx : v){ for(auto sx : vx){ // do something. } } hatsusato C++11
  • 24. C++11 is 䜕? C++11 でできるこず .. initializer list hatsusato C++11
  • 25. C++11 is 䜕? C++11 でできるこず .. initializer list . これたで .. ...... int tmp []={13 ,22 ,37 ,41 ,58}; std :: vector <int > v(tmp ,tmp +5); // vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 す る 。 v.clear (); v.push_back (13); v.push_back (22); v.push_back (37); v.push_back (41); v.push_back (58); // vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 し な お す 。 コンテナをいく぀かのデヌタで初期化するためには、珟 状では䞊蚘のように䞀時的に配列を䜜ったり、push back を䞊べたりする必芁があり、可読性があたりよくない。 hatsusato C++11
  • 26. C++11 is 䜕? C++11 でできるこず .. initializer list . これから .. ...... std :: vector <int > v={13 ,22 ,37 ,41 ,58}; 可読性がよい。 埓来の構造䜓や配列の初期化ず同じ構文であり、たた通 垞のコンストラクタも {} で呌び出せるようになったの で、「初期化は {}、関数呌び出しは ()」ずいうように圹 割分担するこずでコヌドがより明確になる。 倉数の初期化の堎面で {} をどんどん䜿いたしょう。 hatsusato C++11
  • 27. C++11 is 䜕? C++11 でできるこず .. initializer list . これたで .. ...... int tmp []={13 ,22 ,37 ,41 ,58}; std :: vector <int > v(tmp ,tmp +5); // vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 す る 。 v.clear (); v.push_back (13); v.push_back (22); v.push_back (37); v.push_back (41); v.push_back (58); // vに13 ,22 ,37 ,41 ,58 を æ Œ 玍 し な お す 。 . これから .. ...... std :: vector <int > v={13 ,22 ,37 ,41 ,58}; hatsusato C++11
  • 28. C++11 is 䜕? C++11 でできるこず .. nullptr hatsusato C++11
  • 29. C++11 is 䜕? C++11 でできるこず .. nullptr . これたで .. ...... // 関 数 オ ヌ バ ヌ ロ ヌ ド void f(int ){ std ::cout <<"f(int)"<<std :: endl ;} void f(int *){ std ::cout <<"f(int *)"<<std :: endl ;} f(NULL ); // コ ン パ ã‚€ ル ã‚š ラ ヌ  曖 昧 な オ ヌ バ ヌ ロ ヌ ド そもそも C では #define NULL ((void*)0) ずなっおいるが、C++では (void*) から任意のポむンタ ぞの暗黙倉換ができない。そのため、C++11 以前では #define NULL 0 ずなっおいた。よっお、NULL を数倀の (int)0 ず解釈す べきか、ヌルポむンタの (int*)0 ず解釈すべきか曖昧に なっおしたう。 hatsusato C++11
  • 30. C++11 is 䜕? C++11 でできるこず .. nullptr . これから .. ...... // 関 数 オ ヌ バ ヌ ロ ヌ ド void f(int ){ std ::cout <<"f(int)"<<std :: endl ;} void f(int *){ std ::cout <<"f(int *)"<<std :: endl ;} f(nullptr ); // > f(int *) C++11 からは任意のポむンタぞ暗黙倉換可胜な nullptr t 型のキヌワヌド nullptr が远加され、ややこ しい問題はなくなった。 もはや NULL を䜿う意味はありたせん。ヌルポむンタを䜿 いたいずころには nullptr を䜿いたしょう。 hatsusato C++11
  • 31. C++11 is 䜕? C++11 でできるこず .. nullptr . 関数定矩 .. ...... // 関 数 オ ヌ バ ヌ ロ ヌ ド void f(int ){ std ::cout <<"f(int)"<<std :: endl ;} void f(int *){ std ::cout <<"f(int *)"<<std :: endl ;} . これたで .. ...... f(NULL ); // コ ン パ ã‚€ ル ã‚š ラ ヌ  曖 昧 な オ ヌ バ ヌ ロ ヌ ド . これから .. ...... f(nullptr ); // > f(int *) hatsusato C++11
  • 32. C++11 is 䜕? C++11 でできるこず .. lambda expression hatsusato C++11
  • 33. C++11 is 䜕? C++11 でできるこず .. lambda expression . これたで .. ...... struct AbsoluteLess { bool operator ()( int lhs , int rhs){ return std :: abs(lhs)<std :: abs(rhs ); } }; std :: sort(v.begin (), v.end(), AbsoluteLess ()); // 絶 察 倀 の 倧 小 で ã‚œ ヌ ト C++11 以前はアルゎリズムごずに関数や関数オブゞェク トを䜜る必芁があった。たずえ䞀床きりしか䜿わないア ルゎリズムであっおもいちいち関数オブゞェクトを 䜜っおいたが、この方法は蚘述量が倚く、コヌドの流れ がわかりづらい。たた、名前空間䞭に䜙分な名前があふ れるこずに぀ながる。 hatsusato C++11
  • 34. C++11 is 䜕? C++11 でできるこず .. lambda expression . これから .. ...... std :: sort(std :: begin(v), std ::end(v), []( int lhs , int rhs)->bool {return std ::abs(lhs)<std:: abs(rhs );}); ラムダ匏の登堎により、アルゎリズムを衚す関数オブ ゞェクトを䜜る代わりにラムダ匏぀たり無名関数オ ブゞェクトで代甚できるようになった。これにより䜙 分な名前が名前空間にはびこるこずなくコヌドをすっき りず曞くこずができるようになった。 hatsusato C++11
  • 35. C++11 is 䜕? C++11 でできるこず .. lambda expression . これたで .. ...... struct AbsoluteLess { bool operator ()( int lhs , int rhs){ return std :: abs(lhs)<std :: abs(rhs ); } }; std :: sort(v.begin (), v.end(), AbsoluteLess ()); // 絶 察 倀 の 倧 小 で ã‚œ ヌ ト . これから .. ...... std :: sort(std :: begin(v), std ::end(v), []( int lhs , int rhs)->bool {return std ::abs(lhs)<std:: abs(rhs );}); hatsusato C++11
  • 36. C++11 is 䜕? C++11 でできるこず .. move semantics hatsusato C++11
  • 37. C++11 is 䜕? C++11 でできるこず .. move semantics . MyString クラス .. ...... class MyString{ char* _data; size_t _size; public: MyString(const MyString& str) // copy constructor :_data(new char[str._size ]), _size(str._size ){ std:: copy(str._data , str._data+_size , _data ); } MyString(MyString && str) // move constructor :_data(str._data), _size(str._size ){ str._data=nullptr; str._size =0; } // other functions ... }; hatsusato C++11
  • 38. C++11 is 䜕? C++11 でできるこず .. move semantics . これたで .. ...... MyString :: MyString(const MyString& str) :_data(new char[str._size ]), _size(str._size ){ std :: copy(str._data , str._data+_size , _data ); } C++11 以前はデヌタの耇補を䜜る際には、いたる所でコ ピヌが行われおいた。それが圓たり前だった。 hatsusato C++11
  • 39. C++11 is 䜕? C++11 でできるこず .. move semantics . これから .. ...... MyString :: MyString(MyString && str) :_data(str._data), _size(str._size ){ str._data=nullptr; str._size =0; } C++11 では右蟺倀参照ずいう抂念が远加され、より効率 のよいデヌタの耇補方法が提䟛されるようになった。 関数の戻り倀などの、代入するこずのできないオブゞェ クトを右蟺倀ず呌ぶ。move ずは右蟺倀を耇補する際に コピヌをせず、ポむンタの付け替えなどによっおデヌタ を移譲する技術のこずである。 hatsusato C++11
  • 40. C++11 is 䜕? C++11 でできるこず .. move semantics . これから .. ...... MyString :: MyString(MyString && str) :_data(str._data), _size(str._size ){ str._data=nullptr; str._size =0; } move は䞻にナヌザコヌド偎ではなくラむブラリ提䟛偎 が利甚する技術なので、ナヌザコヌドを特に倉曎するこ ずなく恩恵を受けられる。 STL などの右蟺倀参照に察応したラむブラリを甚いた コヌドの実行時速床が、C++11 ずしおコンパむルするだ けで、知らず知らずのうちに向䞊する。 move semantics 玠晎らしい。 hatsusato C++11
  • 41. C++11 is 䜕? C++11 でできるこず .. constexpr hatsusato C++11
  • 42. C++11 is 䜕? C++11 でできるこず .. constexpr . これたで .. ...... #define CUBE(x) (x*x*x) #define SIDE_SIZE (10) #define ARRAY_SIZE (CUBE(SIDE_SIZE )) double array[ARRAY_SIZE ]; // 10^3 個 の 倀 を æ Œ 玍 す る 配 列 C++11 以前は、配列の芁玠数ずしお䜿えるのは、敎数定 数たたは敎数定数で初期化された const な倉数ず敎数定 数で#define したシンボルのみであった。 定数から蚈算しお埗られる結果は定数では無いので、そ の結果を const 倉数に代入しおも、配列の芁玠数ずしお は䜿えない。 かわりに䞊蚘のようにしお衚珟するこずは出来るが、 #define は型安党では無いので、C++においお䜿うのは できるだけ避けるべきである。 hatsusato C++11
  • 43. C++11 is 䜕? C++11 でできるこず .. constexpr . これから .. ...... constexpr int Cube(int x){ return x*x*x;} constexpr int SIDE_SIZE =10; constexpr int ARRAY_SIZE=Cube(SIDE_SIZE ); double array[ARRAY_SIZE ]; // 10^3 個 の 倀 を æ Œ 玍 す る 配 列 C++11 から constexpr ずいうキヌワヌドが远加され、コ ンパむル時定数ずコンパむル時関数を定矩するこずがで きるようになった。 コンパむル時定数にはコンパむル時に決定可胜な倀を指 定するこずができ、コンパむル時にその倀に眮き換えら れる。 hatsusato C++11
  • 44. C++11 is 䜕? C++11 でできるこず .. constexpr . これから .. ...... constexpr int Cube(int x){ return x*x*x;} constexpr int SIDE_SIZE =10; constexpr int ARRAY_SIZE=Cube(SIDE_SIZE ); double array[ARRAY_SIZE ]; // 10^3 個 の 倀 を æ Œ 玍 す る 配 列 コンパむル時関数は関数内で蚘述できる凊理が制限され おいるものの、党おの匕数がコンパむル時定数ならば戻 り倀がコンパむル時に蚈算され、コンパむル時定数や const 定数の初期化に䜿うこずができる。匕数の䞀郚が 実行時に決定される堎合は、コンパむル゚ラヌになるこ ずなく、実行時に蚈算される。 䞊蚘のようにコンパむル時関数には戻り倀の型があり、 型安党である。 hatsusato C++11
  • 45. C++11 is 䜕? C++11 でできるこず .. 䟿利なラむブラリ矀 スマヌトポむンタ (shared ptr, weak ptr, unique ptr) 擬䌌乱数生成 (メルセンヌツむスタなど) 正芏衚珟 ハッシュ衚 (unordered map, unordered set) スレッドラむブラリ その他たくさんの䟿利機胜远加修正 たたの機䌚に。 hatsusato C++11
  • 46. C++11 is 䜕? C++11 でできるこず .. C++11 の利甚方法 hatsusato C++11
  • 47. C++11 is 䜕? C++11 でできるこず .. C++11 の利甚方法 C++11 は぀い最近確定したばかりの巚倧な芏栌なので、 C++11 察応したコンパむラはただ少ないのが珟状です。 hatsusato C++11
  • 48. C++11 is 䜕? C++11 でできるこず .. C++11 の利甚方法 C++11 は぀い最近確定したばかりの巚倧な芏栌なので、 C++11 察応したコンパむラはただ少ないのが珟状です。 䟋えば gcc では、gcc4.3 以降で-std=c++11 オプション -std=c++11 の c は小文字なので泚意を指定するこず で C++11 のコヌドずしおコンパむルできるようになっお いたす。 hatsusato C++11
  • 49. C++11 is 䜕? C++11 でできるこず .. C++11 の利甚方法 C++11 は぀い最近確定したばかりの巚倧な芏栌なので、 C++11 察応したコンパむラはただ少ないのが珟状です。 䟋えば gcc では、gcc4.3 以降で-std=c++11 オプション -std=c++11 の c は小文字なので泚意を指定するこず で C++11 のコヌドずしおコンパむルできるようになっお いたす。 ちなみに今回のスラむドのコヌドスニペットは gcc version 4.7.2 で実行確認したした。 hatsusato C++11
  • 50. C++11 is 䜕? C++11 でできるこず .. C++11 の利甚方法 C++11 は぀い最近確定したばかりの巚倧な芏栌なので、 C++11 察応したコンパむラはただ少ないのが珟状です。 䟋えば gcc では、gcc4.3 以降で-std=c++11 オプション -std=c++11 の c は小文字なので泚意を指定するこず で C++11 のコヌドずしおコンパむルできるようになっお いたす。 ちなみに今回のスラむドのコヌドスニペットは gcc version 4.7.2 で実行確認したした。 もはや C++03 でコヌドを曞くこずは倧きな損倱に他なり たせん。これから C++を䜿うずきは是非 C++11 を䜿い たしょう。 hatsusato C++11
  • 51. C++11 is 䜕? C++11 でできるこず .. たずめ C++11 は曞きやすく、読みやすく、たた速いコヌドを簡 単に曞くこずができる玠晎らしい hatsusato C++11
  • 52. C++11 is 䜕? C++11 でできるこず .. èš‚æ­£ //do something. の郚分で v に察しお倉曎を加えないのであ れば、auto ではなくお、const auto であるべき。 . auto .. ...... for(const auto it=std:: begin(v); it!=std:: end(v); ++it){ // do something. } . range-based for .. ...... for(const auto& vx : v){ for(const auto& sx : vx){ // do something. } } hatsusato C++11