内容紹介
ベストセラー「Effective C++」のC++11、C++14に対応した改訂後継版!
初版発刊から30年以上経ったいまでも、C++プログラマから絶大な支持を集め、ロングセラーを記録しているスコット・メイヤーズの名著『Effective C++』の改訂後継版。過去のメイヤーズの「Effective」シリーズと同様、優れたC++プログラムはどのように書けばよいのかを指南。効果的かつ堅牢、移植性の高い優れたC++プログラムを書くノウハウを42項目にまとめています。
目次
詳細目次
出版社より
謝辞
はじめに
1章 型推論
項目1:テンプレートの型推論を理解する
項目2:auto の型推論を理解する
項目3:decltype を理解する
項目4:推論された型を確認する
2章 auto
項目5:明示的型宣言よりもauto を優先する
項目6:auto が期待とは異なる型を推論する場面ではETII を用いる
3章 現代のC++ への移行
項目7:オブジェクト作成時の() と{} の違い
項目8:0 やNULL よりもnullptr を優先する
項目9:typedef よりもエイリアス宣言を優先する
項目10:enum にはスコープを設ける
項目11:private な未定義関数よりもdelete を優先する
項目12:オーバライドする関数はoverride と宣言する
項目13:iterator よりもconst_iterator を優先する
項目14:例外を発生させない関数はnoexcept と宣言する
項目15:可能な場面では常にconstexpr を用いる
項目16:const メンバ関数はスレッドセーフにする
項目17:自動的に生成される特殊メンバ関数を理解する
4章 スマートポインタ
項目18:独占するリソースの管理にはstd::unique_ptr を用いる
項目19:共有するリソースの管理にはstd::shared_ptr を用いる
項目20:不正ポインタになり得るstd::shared_ptr ライクなポインタにはstd::weak_ptrを用いる
項目21:new の直接使用よりもstd::make_unique やstd::make_shared を優先する
項目22:Pimpl イディオムを用いる際は特殊メンバ関数を定義する
5章 右辺値参照、ムーブセマンティクス、完全転送
項目23:std::move とstd::forward を理解する
項目24:ユニヴァーサル参照と右辺値参照の違い
項目25:右辺値参照にはstd::move を、ユニヴァーサル参照にはstd::forward を用いる
項目26:ユニヴァーサル参照をとるオーバロードは避ける
項目27:ユニヴァーサル参照をとるオーバロードの代替策を把握する
項目28:参照の圧縮を理解する
項目29:ムーブ演算は存在しない、コスト安でもない、使用もされないと想定する
項目30:完全転送できない場面を把握する
6章 ラムダ式
項目31:ディフォルトのキャプチャモードは避ける
項目32:クロージャ内にオブジェクトをムーブする場面では初期化キャプチャを用いる
項目33:auto&& 仮引数をstd::forward する場合はdecltype を用いる
項目34:std::bind よりもラムダを優先する
7章 並行API
項目35:スレッドベースよりもタスクベースプログラミングを優先する
項目36:非同期性が不可欠の場面ではstd::launch::async を指定する
項目37:std::thread はすべての場面でjoin 不可にする
項目38:スレッドハンドルのデストラクタ動作の差異には注意する
項目39:イベントが1 度切りならばvoid なfuture を検討する
項目40:並行処理にはstd::atomic を、特殊メモリにはvolatile を用いる
8章 もう一ひねり
項目41:コピー可能仮引数のムーブコストが安く、かつ常にコピーする場面では値渡しを検討する
項目42:要素の挿入の代わりに直接配置を検討する
査読者あと書き
索引
続きを見る