Effective Modern C++目次(予定)勝手訳

**2015/09/18に書籍タイトル「[Effective Modern C++ − C++11/14プログラムを進化させる42項目](http://www.oreilly.co.jp/books/9784873117362/)」として日本語訳が刊行されました。**（当然ながら）下記の抄訳とはItem訳および内容が少し異なります。ご注意ください。

**2014/11/11に書籍タイトル"Effective Modern C++, 42 Specific Ways to Improve Your Use of C++11 and C++14"として[eBook版が刊行](http://scottmeyers.blogspot.jp/2014/11/emc-exists-publishing-purgatory.html)されたそうです。**下記の抄訳Itemと正式版のItemとでは、すこし異なっています。ご注意ください。

----

Scott Meyers氏のブログ記事[Book Report: New Title, New TOC, New Sample Item](http://scottmeyers.blogspot.jp/2014/03/book-report-new-title-new-toc-new.html)より、C++11/C++14を対象とした"Effective Modern C++"目次一覧(予定)の勝手抄訳。

該当書籍"EMC++(Effective Modern C++)"は、"[EC++(Effective C++)](http://www.amazon.com/dp/0321334876)", "[MEC++(More Effective C++)](http://www.amazon.com/dp/020163371X)"のアップデートとして刊行予定だそうです。非常に楽しみですね<del>（日本語版はいつ頃になるでしょう？）</del>

----

- Chapter 1 型推論
  - Item 1: テンプレート型推論を理解しよう
  - Item 2: `decltype`を理解しよう
  - Item 3: 推論された型の見かたを知ろう
- Chapter 2 auto
  - Item 4: 明示的な型宣言よりも`auto`を使おう
  - Item 5: 変数宣言では`auto` + { expr }が`std::initializer_list`となることを忘れずに
  - Item 6: 型付き初期化(typed initializer)イディオムに注意しよう[^1]<del>（訳注：`initializer_list<T>`のこと？）</del>
- Chapter 3 C++98からC++11そしてC++14へ
  - Item 7: オブジェクト生成時の`()`と`{}`を区別しよう
  - Item 8: `0`や`NULL`よりも`nullptr`を使おう
  - Item 9: `typedef`よりもalias宣言を使おう（訳注：後者は`using U = T;`構文）
  - Item 10: 従来の列挙子(unscoped enums)よりもスコープ付き列挙子(scoped enums)を使おう
  - Item 11: privateな未定義関数よりも`delete`された関数を使おう
  - Item 12: オーバーライド関数では`override`宣言をしよう
  - Item 13: `iterator`よりも`const_iterator`を使おう
  - Item 14: できるだけ`constexpr`を使おう
  - Item 15: constメンバ関数はスレッドセーフにしよう
  - Item 16: できるだけ関数を`noexcept`と宣言しよう（訳注："whenever possible"は強すぎる表現では？）[^2]
  - Item 17: 常にコピーされるようなムーブコストの安いパラメータでは、値渡し(pass by value)方式を検討しよう
  - Item 18: 挿入(insertion)ではなく配置(emplacement)を検討しよう
  - Item 19: 特殊なメンバ関数生成を理解しよう
- Chapter 4 スマートポインタ
  - Item 20: 排他所有リソース管理には`std::unique_ptr`を使おう
  - Item 21: 共有所有リソース管理には`std::shared_ptr`を使おう
  - Item 22: ぶら下がり(dangle)の可能性がある`std::shared_ptr`風ポインタには`std::weak_ptr`を使おう
  - Item 23: `new`を直接使うのではなく`std::make_unique`や`std::make_shared`を使おう
  - Item 24: Pimpl Idiomを使うときは、実装を行うファイルにて特殊メンバ関数を定義しよう
- Chapter 5 ラムダ式
  - Item 25: デフォルトキャプチャモードを避けよう
  - Item 26: クロージャは小さく保とう
  - Item 27: `std::bind`よりもラムダを使おう
- Chapter 6 右辺値参照(Rvalue References)、ムーブセマンティクス、完全転送(Perfect Forwarding)
  - Item 28: `std::move`と`std::forward`を理解しよう
  - Item 29: 右辺値参照とUniversal referencesを区別しよう（訳注：後者はScott氏の造語）
  - Item 30: `std::move`にて右辺値参照を、`std::forward`にてUniversal referencesを渡そう／返そう 
  - Item 31: Universal referencesによるオーバーロードを避けよう
  - Item 32: Universal referencesによるオーバーロードの代替案を理解しよう
  - Item 33: Reference collapsingを理解しよう
  - Item 34: ムーブ操作が存在しない／軽量でない／利用されないと仮定しよう
  - Item 35: 完全転送に失敗するケースについてよく理解しよう
- Chapter 7 スレッディングAPI
  - Item 36: 全ての実行パスで`std::thread`をunjoinableにしよう
  - Item 37: 非同期性が不可欠なら`std::launch::async`を指定しよう
  - Item 38: スレッドハンドルデストラクタのさまざまな挙動に注意しよう
  - Item 39: one-shotイベント通信としてvoid futureを検討しよう
  - Item 40: 並行性のために`std::atomic`を、メモリマップドI/Oのために`volatile`を使おう
  - Item 41: 可能な限り逐次一貫性(sequential consistency)を採用しよう 

[^1]: 正式版では"Item 6: Use the explicitly typed initializer idiom when `auto` deduces undesired types"に対応する。`auto v = static_cast<T>(f())`のような明示的キャストを指す。
[^2]: [論争を引き起こしていた](http://scottmeyers.blogspot.jp/2014/08/near-final-draft-of-effective-modern-c.html)が、正式版では"Item 14: Declare functions `noexcept` if they won't emit exceptions"に対応する。

----
おまけ：以前の目次案(抄訳)は[Effective C++11（の種）](http://d.hatena.ne.jp/yohhoy/20120418/p1), [Effective C++11/Concurrency関連の目次草案](http://d.hatena.ne.jp/yohhoy/20130418/p1)もあります。