44
46

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-03-24

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

2014/11/11に書籍タイトル"Effective Modern C++, 42 Specific Ways to Improve Your Use of C++11 and C++14"としてeBook版が刊行されたそうです。下記の抄訳Itemと正式版のItemとでは、すこし異なっています。ご注意ください。


Scott Meyers氏のブログ記事Book Report: New Title, New TOC, New Sample Itemより、C++11/C++14を対象とした"Effective Modern C++"目次一覧(予定)の勝手抄訳。

該当書籍"EMC++(Effective Modern C++)"は、"EC++(Effective C++)", "MEC++(More Effective C++)"のアップデートとして刊行予定だそうです。非常に楽しみですね(日本語版はいつ頃になるでしょう?)


  • 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(訳注:initializer_list<T>のこと?)
  • Chapter 3 C++98からC++11そしてC++14へ
    • Item 7: オブジェクト生成時の(){}を区別しよう
    • Item 8: 0NULLよりも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_uniquestd::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::movestd::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)を採用しよう

おまけ:以前の目次案(抄訳)はEffective C++11(の種), Effective C++11/Concurrency関連の目次草案もあります。


  1. 正式版では"Item 6: Use the explicitly typed initializer idiom when auto deduces undesired types"に対応する。auto v = static_cast<T>(f())のような明示的キャストを指す。 

  2. 論争を引き起こしていたが、正式版では"Item 14: Declare functions noexcept if they won't emit exceptions"に対応する。 

44
46
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
46