SlideShare una empresa de Scribd logo
1 de 133
Descargar para leer sin conexión
Effective Modern C++と
C++ Core Guidelines
okada(@okdshin)
C++を書くのに必要な知識
規格?
(引用元 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf)
C++標準規格から分かること
C++の文法
C++の機能
C++標準ライブラリの仕様
規格は何を考慮してコードを書け
ばいいのかは教えてくれない
感覚としては辞書に近い
C++11/14で
関数はどのように書くべきなのか?
クラスはどのように書くべきなのか?
{}による初期化で気をつけるべきことは?
いつForwarding Referenceを使うべきなのか?
......
C++11/14でいろいろな機能が追加
されたのはなぜなのか?
どれもきちんとした理由があり
その理由に応じた適切な使い方がある
しかし規格だけでは分からない
そこでEffective Modern C++
(引用元 https://www.oreilly.co.jp/books/images/picture_large978-4-87311-736-2.jpeg)
Effective Modern C++
Effective C++の著者 Scott Meyers氏によって書かれた
C++11/14の解説書
9月に邦訳も出ました
「C++11/14プログラムを進化させる42項目」
(引用元 https://www.oreilly.co.jp/books/images/picture_large978-4-87311-736-2.jpeg)
僕がなぜここにいるのか
EMC++邦訳の査読をしました。
査読するまでの経緯
査読って何したの?
報酬は?
EMC++第一章「型推論」
まるまるPDFで公開されている
http://www.oreilly.co.jp/pub/9784873117362/ch01.pdf
……
EMC++が手に入らない場合
EMC++勉強会@東京の資料が公開されている
https://github.com/herumi/emcjp
Q. Effective Modern C++以外に
C++11/14の書き方を指南するよう
な書籍はないの?
A. あります。
C++ Core Guidelines
https://github.com/isocpp/CppCoreGuidelines
著者はBjarne Stroustrup氏とHerb Sutter氏
C++ Core Guidelinesって?
「The C++ Core Guidelines are a set of tried-and-true
guidelines, rules, and best practices about coding in C++」
「C++コーディングにおける実証済みのガイドラインと
ルール、そしてベストプラクティスの集合体である」
Q. C++ Core Guidelinesは
"More" Effective Modern C++か?
A.どちらかというとNo
Modern C++ Coding Standardsと言
うべき印象
(引用元 http://www.gotw.ca/images/c++cs-cover.jpg)
内容もCCSと結構被ってるところがある
書き方もそっくり
EMC++と比べて項目が短くて簡潔
C++ Core Guidelinesはまだ未完成
アプリケーションやライブラリの設計に対するルール集
であり、C++のチュートリアルではない。
複数のコードベースをまたいでより統一的なC++コード
スタイルを確立することを目指す。
基本的に新しくコードを書くことを前提にしている。
内容が直感、経験に反するかもしれない。修正歓迎。
C++ Core Guidelinesは実用性重視
なるべくたくさんのルールを入れる。
内容的な重複も厭わない
一見、とるに足らないようなルールもある。
(初心者がいることを忘れるな!)
完璧に合法なC++のためにエラーが起きやすいコードを
書くようなことは勧めない。
C++のサブセットでJavaを作ったりはしない。
将来的に解析ツールでルールが守
られているか自動でチェックでき
るようにする
プログラマがルールを全部知っておく必要はないように
したい
解析ツールが参照しやすいようにルールにインデックス
を付ける(例:F.15、ES.30)
ここからはC++ Core Guidelinesから
僕が独断と偏見で
選んだルールを紹介
ところで、関数書いてますか?
C++に新たに導入されたものども
スマートポインタ
(uniqur_ptrとshared_ptr)
unique_ptrは排他的所有権(exclusive ownership)を扱う
shared_ptrは共同所有権(shared ownership)を扱う
Rvalue reference
void f(T&& t) { // T&&がrvalue reference
...
}
Forwarding reference*
template<typename TP>
void f(TP&& t) { // TP&&がforwarding reference
...
}
Forwarding referenceについてはEMC++項目24を参照
* EMC++ではユニヴァーサル参照(universal reference)となっている。
Q. C++11/14では関数の引数や
返り値はどのようにすればいい?
A. これまで通りで全く大丈夫
F.15 なるべくこれまでどおりのシ
ンプルなやり方で情報を渡す
「特殊で賢いテクニック」は他のプログラマを困惑さ
せ、コードの理解を妨げ、バグの温床となる。
どうしてもよく知られたやり方以外の方法が相応しいと
思うなら、性能が実際に向上することを計測によって確
かめ、きちんとドキュメント化しておく(おそらく可搬
性がないため)。
(引用元 https://github.com/isocpp/CppCoreGuidelines/blob/master/param-passing-
normal.png)
Q. 引数はスマートポインタで受け
取るべき?
A. 関数の処理に所有権がからむか
による。
F.7 一般的な用途では、
スマートポインタではなく
T*で引数を受け取る
R.30 ライフタイムに関連する操作
を行う場合にのみ、スマートポイ
ンタを仮引数とする
スマートポインタで引数を受け取るようにしてしまう
と、関数の利用者に対してスマートポインタを使うこと
を強制してしまう。
std::shared_ptrなどの一部のスマートポインタは実行時
コストが大きい。
Q. ムーブセマンティクスでvector
とか、巨大なオブジェクトをその
まま返り値にしても良くなったっ
て聞いたけれど?
A. はい。
しかし例外事項には注意が必要。
F.20 出力用の仮引数を用意するよ
りも、なるべくreturnで返す。
F.21 複数の値を出力したい場合は
なるべくtupleやstructを使う。
入出力用引数は出力専用引数と混同されやすいが、
返り値は問題ない。
返すオブジェクトがSTLコンテナであっても、
暗黙的にmoveされる上に、
明示的にメモリ管理する必要がなくなる。
ただし、個別にはムーブコストが安いオブジェクトもそ
れがたくさん集まった構造体ではコストが累積して高く
付くかもしれないことに注意。(例外事項を参照)
例外事項
値型でない場合、例えば派生クラスを基底クラスのポイ
ンタで返したい場合はunique_ptrかshared_ptrで返すよ
うにする*
* 汎用性を考えるならunique_ptrで返すべきだろう。shared_ptrで受け取れば暗黙に変換され
る(EMC++項目18参照)。
例外事項
ムーブコストが高い型の場合(例えば
array<BigPOD>)、フリーストアで確保してハンドル
(unique_ptr等)を返すか、出力専用引数の使用を検討
する。
例外事項
ループで何度も関数を呼び出すが、メモリ確保のコスト
が無視できないためオブジェクトを使いまわしたいよう
な場合には出力専用引数を使用する(「caller-allocated
out」パターン)。
ちなみに
tuple型の返り値には
tieを使うと便利
Sometype iter;
Someothertype success;
tie(iter, success) = myset.insert("Hello"); // tupleを返す。
if(success) do_something_with(iter);
Q. スマートポインタがあるから、
もう生のポインタを
使うことはないの?
A. 所有権がからまないなら、
生のポインタで十分。
F.42 位置(position)を示す場合に
限り、T*を返す。
生ポインタが役立つ例。
所有権がからまないなら生ポインタでOK。(所有権を扱
う場合はunique_ptrなどスマートポインタを使う)
Node* find(Node* t, const string& s) // 二分木からsを持つノードを探す
{
if (t == nullptr || t->name == s) return t;
if (auto p = find(t->left, s)) return p;
if (auto p = find(t->right, s)) return p;
return nullptr;
}
……
Warning
これまでどおりの、シンプルで、分かりやすくて、簡単
なやり方を捨ててでも、
あるかどうかも不明確な効率が欲しい人のために
(しかし往々にしてどうしても必要な場合がある
(特にライブラリ作成者には))
Advanced
(引用元 https://github.com/isocpp/CppCoreGuidelines/blob/master/param-passing-
advanced.png)
F.18 「消費する(consume)」仮
引数は、X&&とし、moveする。
型がムーブに対応していれば効率的であるし、かつ、呼
び出し元がlvalueを与えようとしても明示的にstd::move
しなければコンパイルエラーとなるため、バグを回避で
きる。
例外事項
ムーブ可能でムーブコストの低い、排他的所有権を扱う
型(unique_ptrなど)はよりシンプルに値渡しもでき、
ほぼ同じ効果を得ることができる(余分なムーブが一回
発生するが、そのコストは低い。単純明快さのほうが重
要)。
f(unique_ptr<SomeType>&&); // bad
g(unique_ptr<SomeType>); // good 余分なムーブが発生するが単純で明解
Q. で、Forwarding referenceはいつ
使うべきなの?
A. 引数を別の関数に転送したい場
合。そして、その場合にのみ。
F.19 「転送する(forward)」仮引
数は、TP&&とし、std::forwardの
み行う。
単に別の関数に引数を転送したい場合、
また、この場合にのみ、
引数のconst性とrvalue性は無視させる必要がある。
template <class F, class... Args>
inline auto invoke(F f, Args&&... args) {
return f(forward<Args>(args)...);
}
もうひとつ、
返り値で注意するべきこと。
F.45 T&&を返さない
破壊される一時オブジェクトへの参照を返してしまう。
一時オブジェクトを関数に渡すのは安全(一時オブジェ
クトの寿命は関数呼び出しが終わるまで持つ)
一時オブジェクトを関数から返すのは危険(呼び出し元
が受け取った時点で、一時オブジェクトの寿命は既に尽
きている)
え?
moveとforwardは?
例外事項
moveとforwardはT&&を返すが、
キャストしてるだけだからOK。
オブジェクトは寿命が尽きる前に式に渡される。
他にT&&を返す例が思いつかない
(by Stroustrup & Sutter)
結局、引数や返り値はこれまでの
やり方でだいたいOK
ところで、クラス書いてますか?
クラスには
コンパイラが暗黙に生成しうる
特別なメンバ関数がある。
暗黙に生成しうる関数
デフォルトコンストラク
タ
コピーコンストラクタ
コピー代入演算子
ムーブコンストラクタ
ムーブ代入演算子
デストラクタ
Q. どれをいつ自分で定義して
いつコンパイラが勝手に生成する
のを抑制するべき?
A. 全か無か
C.20 コンパイラが暗黙に生成する
関数をまったく定義する必要がな
いなら、全て定義しない。
もっとも単純で、もっとも明解。
struct Named_map {
public:
// ... 特別なメンバ関数を定義しない ...
private:
string name;
map<int, int> rep;
};
Named_map nm; // 暗黙に生成されたデフォルトコンストラクタが呼び出される。
Named_map nm2{nm}; // 暗黙に生成されたコピーコンストラクタが呼び出される。
これと関連して
C.21 コンパイラが暗黙に生成する
関数を一つでも定義もしくは
=deleteするなら、他の関数も全て
定義もしくは=deleteする。
コンパイラが暗黙に生成する関数はどれも密接に関連し
ているため、そのうちの一つでもデフォルトの挙動がそ
ぐわないなら、恐らく他の関数も修正する必要がある。
struct M2 { // bad: incomplete set of default operations
public:
// ...
// ... no copy or move operations ...
~M2() { delete[] rep; }
private:
pair<int, int>* rep; // zero-terminated set of pairs
};
void use() {
M2 x;
M2 y;
// ...
x = y; // the default assignment
// ...
}
暗黙に生成される実装で良い場合は=defaultする。
(暗黙に生成される実装と同じものを明示的に定義する
ことになる)
暗黙に生成してほしくない場合は=deleteする。
(従来のprivateで宣言する方法よりもコンパイルエラー
が分かりやすくなる。EMC++項目11参照)
基本的に、特別なメンバ関数は
全て書く/全て書かないの二択。
Q. ところで、デフォルトコンスト
ラクタって必要なの?
A. はい
C.43 クラスがデフォルトコンスト
ラクタを確実に持つようにする
言語機能と標準ライブラリの中にはオブジェクトがデ
フォルトコンストラクタで初期化可能であることを前提
にしているものがたくさんある。
vector::vector(size_t)
class Date {
public:
Date();
// ...
};
vector<Date> vd1(1000); // デフォルトコンストラクタが必要(*)
vector<Date> vd2(1000,
Date{Month::october, 7, 1885}); // こうすれば合法ではある
* 厳密にはDefaultInsertableコンセプトを満たせばOKではあるが、アロケータをカスタマイズ
するのでもない限りデフォルトコンストラクタが必要と考えてよい。
(再掲)tie
Sometype iter; // デフォルトコンストラクタが呼ばれる。
Someothertype success; // 同上。
tie(iter, success) = myset.insert("Hello");
if(success) do_something_with(iter);
Q. メンバ変数を特定の値に初期化
したいだけなのに、そのためにデ
フォルトコンストラクタを書い
て、そのために他の特別なメンバ
関数を定義しないといけなくなる
のって大変じゃない?
A. リスト初期化(list
initialization*)があるから
大丈夫。
* initializer_listとは別物
C.45 メンバ変数を初期化するだけ
のデフォルトコンストラクタを定
義しない。代わりに、クラス内メ
ンバ初期化(in-class member
initializers)*を使う。
* メンバ変数のリスト初期化を指していると思われる
メンバ変数のリスト初期化の例
class Bad { // メンバ変数をリスト初期化するべき
string s;
int i;
public:
X1() :s{"default"}, i{1} { }
// 他の生成される関数を明示的に定義する必要がある(C.21)
// ...
};
class Good { // より効率的
string s = "default";
int i = 1;
public:
// コンパイラが生成したデフォルトコンストラクタを使う
// ...
};
コンストラクタ書いてますか?
複雑なコンストラクタを書くより
もinit()メンバ関数を別に用意した
ほうがいいの?
A. いいえ。
C.41 コンストラクタは
完全に初期化されたオブジェクト
を生成するべき
コンパイラはコメントを読まない
恐らくプログラマも読まない
class X1 {
FILE* f; // 他の関数を呼ぶ前にinit()をまず呼び出せよ! 絶対だぞ!
// ...
public:
X1() {} // 何もしない可愛らしいデフォルトコンストラクタ。
void init(); // fを初期化する
void read(); // fから読み出す。
// ...
};
void f() {
X1 file;
file.read(); // クラッシュするか、まったく無意味な値を読み出す。
// ...
file.init(); // もう遅い。
// ...
}
オブジェクトを生成した後、init()メンバ関数を呼び出す
必要があるなら、設計を見直す。
コンストラクタだけではうまく初期化できないなら、
ファクトリ関数を使う。
複数のコンストラクタで共通の処理があるなら、
デリゲートコンストラクタを使う。
ファクトリ関数の例
class B {
protected:
virtual void PostInitialize()
{ ... f(); ... } // 仮想関数をディスパッチする
public:
virtual void f() = 0;
template<class T>
static shared_ptr<T> Create() { // コンストラクタの代わり
auto p = make_shared<T>();
p->PostInitialize();
return p;
}
};
class D : public B { ... }; // 派生クラス
shared_ptr<D> p = D::Create<D>(); // Dオブジェクトの生成
Q. デリゲートコンストラクタ?
A. あるコンストラクタから他のコ
ンストラクタを呼べる機能
C.51 全てのコンストラクタに共通
する動作をさせるために、デリ
ゲートコンストラクタを使う。
同じことを何度も繰り返すのは退屈な上に
失敗しやすい。
悪い例
class Date { // Bad: 似たコードの繰り返しがある。
int d;
Month m;
int y;
public:
Date(int ii, Month mm, year yy)
:i{ii}, m{mm} y{yy}
{ if (!valid(i, m, y)) throw Bad_date{}; }
Date(int ii, Month mm)
:i{ii}, m{mm} y{current_year()}
{ if (!valid(i, m, y)) throw Bad_date{}; }
// ...
};
良い例
class Date2 {
int d;
Month m;
int y;
public:
Date2(int ii, Month mm, year yy)
:i{ii}, m{mm} y{yy}
{ if (!valid(i, m, y)) throw Bad_date{}; }
// 他のコンストラクタを呼び出す。
Date2(int ii, Month mm)
:Date2{ii, mm, current_year()} {}
// ...
};
Q. コンストラクタで例外を投げる
のはだめなの?
A. 大丈夫。
C.42 コンストラクタでオブジェク
トの生成に失敗した場合は、例外
を投げる。
未完成のオブジェクトを放置するのはトラブルの元。
例外事項
飛行機の運転システムのようなハードなリアルタイム処
理が要求されるシステムなどではエラー処理の挙動が予
測不可能な場合がある。
そのような場合はis_valid()テクニックを使い、一貫して
生成したオブジェクトをチェックするようにする。
Q. デストラクタの場合は?
A. 失敗は死を意味する。
C.36 デストラクタは
失敗してはならない
デストラクタが失敗する恐れがある場合に、どうすれば
安全なプログラムを作成できるかは一般的にはわかって
いない。
標準ライブラリは全ての扱う型がデストラクタでエラー
を発生させないことを要求する。
コンストラクタとは異なることに注意(コンストラクタ
は基本的にエラーを投げたほうがよい)。
C.37 デストラクタを
noexceptにする
デストラクタがエラーを投げてプログラムが続行するく
らいならterminateするほうがマシ。
ラムダ使ってますか?
Q. ラムダ便利。関数オブジェクト
と比べて何も新しいことができる
ようになったわけでもないのに。
A. 質問ではない。
ES.28 複雑な初期化を行う場合に、
ラムダを使う。特にconst変数を初
期化する場合。
ラムダはローカル変数の初期化に利用できる。
特にconst変数にできるのは嬉しい。
ラムダでローカル変数の初期化
// Bad
widget x; // constであるべき。しかし……
for(auto i=2; i <= N; ++i) { // 後で初期化するため、constにできない。
x += some_obj.do_something_with(i);
}
// Good
const widget x = [&]{ // constにできる!
widget val; // デフォルトコンストラクタで初期化
for(auto i=2; i <= N; ++i) {
val += some_obj.do_something_with(i);
}
return val;
}();
取るに足らないけれど、悩ましい
問題。
Q. コード書く時にCamelCaseにし
たほうがいいの? それとも
snake_caseのほうがいいの?
A. 選択肢の有無で判断する。
NL.10 CamelCaseの使用は避ける
迷う。「camelCaseのほうがよくない?」
標準ライブラリは基本的にsnake_caseで書かれている。
デフォルトでsnake_caseにする。
ただし、既にsnake_case以外で書かれたコードがある場
合は、そのスタイルに従う。
個人の趣向よりもコードの一貫性が大事
C++ Core Guidelinesまとめ
F.15 なるべくこれまでどおりのシンプルなやり方で情報
を渡す
F.7 一般的な用途では、スマートポインタではなくT*で
引数を受け取る
R.30 ライフタイムに関連する操作を行う場合にのみ、ス
マートポインタを仮引数とする
F.20 出力用の仮引数を用意するよりも、なるべくreturn
で返す。
F.21 複数の値を出力したい場合はなるべくtupleやstruct
を使う。
C++ Core Guidelinesまとめ
F.42 位置(position)を示す場合に限り、T*を返す。
F.18 「消費する(consume)」仮引数は、X&&とし、
moveする。
F.19 「転送する(forward)」仮引数は、TP&&とし、
std::forwardのみ行う。
F.45 T&&を返さない
C++ Core Guidelinesまとめ
C.20 コンパイラが暗黙に生成する関数をまったく定義す
る必要がないなら、全て定義しない。
C.21 コンパイラが暗黙に生成する関数を一つでも定義も
しくは=deleteするなら、他の関数も全て定義もしくは
=deleteする。
C.43 クラスがデフォルトコンストラクタを確実に持つよ
うにする
C.45 メンバ変数を初期化するだけのデフォルトコンスト
ラクタを定義しない。代わりに、クラス内メンバ初期化
(in-class member initializers)を使う。
C++ Core Guidelinesまとめ
C.41 コンストラクタは
完全に初期化されたオブジェクトを生成するべき
C.51 全てのコンストラクタに共通する動作をさせるため
に、デリゲートコンストラクタを使う。
C.42 コンストラクタでオブジェクトの生成に失敗した場
合は、例外を投げる。
C.36 デストラクタは失敗してはならない
C.37 デストラクタをnoexceptにする
C++ Core Guidelinesまとめ
ES.28 複雑な初期化を行う場合に、ラムダを使う。特に
const変数を初期化する場合。
NL.10 CamelCaseの使用は避ける
今回話さなかったこと
Gudeline Support Library(GSL)
C++17
他にも山ほどあるルール
全体のまとめ
C++ Core Guidelinesを読もう
精読する必要はない。
まずは、ざっと目次を眺めて、気になるものがあれば、
そこから見ていく。
精読するとモダンなC++の作法が網羅的に分かる
Effective Modern C++を読もう
手に入らない人は公開されているものを読もう
第一章「型推論」
http://www.oreilly.co.jp/pub/9784873117362/ch01.pdf
EMC++勉強会@東京まとめ
https://github.com/herumi/emcjp
規格書を辞書として使う
精読する必要はない。
知りたい単語で検索をかけて関係ありそうな部分を読ん
でみる
真の全体のまとめ
C++を学ぶなら英語を読もう
裏の全体のまとめ
Q. なぜ我々はコードを書くのか?
A. 現実は多様性に富んでいるから
大事なのは理由

Más contenido relacionado

La actualidad más candente

AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022Rui Hirokawa
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
Allocators@C++11
Allocators@C++11Allocators@C++11
Allocators@C++11Cryolite
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方豊明 尾古
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)Takanori Sejima
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと信之 岩永
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
どこに何を書くのか?
どこに何を書くのか?どこに何を書くのか?
どこに何を書くのか?pospome
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話Kentaro Yoshida
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?増田 亨
 

La actualidad más candente (20)

AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
Allocators@C++11
Allocators@C++11Allocators@C++11
Allocators@C++11
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
どこに何を書くのか?
どこに何を書くのか?どこに何を書くのか?
どこに何を書くのか?
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 

Similar a Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines

S2dao Seminar in tripodworks
S2dao Seminar in tripodworksS2dao Seminar in tripodworks
S2dao Seminar in tripodworkstripodworks
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうDevTakas
 
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよkumake
 
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?まだSwiftで消耗してるの?
まだSwiftで消耗してるの?今城 善矩
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうTomomitsuKusaba
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_bodykasaharatt
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamuraHiroshi Okunushi
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweightgintenlabo
 
2022年ASP.NETCore2.2~6.0の旅.pptx
2022年ASP.NETCore2.2~6.0の旅.pptx2022年ASP.NETCore2.2~6.0の旅.pptx
2022年ASP.NETCore2.2~6.0の旅.pptxMasanori Masui
 
C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編道化師 堂華
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソYoshitaka Seo
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generatorOda Shinsuke
 
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux20170527 inside .NET Core on Linux
20170527 inside .NET Core on LinuxTakayoshi Tanaka
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopTakashi Kambayashi
 

Similar a Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines (20)

S2dao Seminar in tripodworks
S2dao Seminar in tripodworksS2dao Seminar in tripodworks
S2dao Seminar in tripodworks
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
 
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
 
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_body
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
2022年ASP.NETCore2.2~6.0の旅.pptx
2022年ASP.NETCore2.2~6.0の旅.pptx2022年ASP.NETCore2.2~6.0の旅.pptx
2022年ASP.NETCore2.2~6.0の旅.pptx
 
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
 
C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
 
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for Hadoop
 

Último

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Último (12)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines