Effective Modern C++
エフェクティブ モダン シープラスプラス
C++11 / 14 プログラムを進化させる 42 項目
- 著者:
- スコット・マイアーズ / 千住治郎(マイアーズ, スコット / センジュ, ジロウ)
- 出版社:
- オライリー・ジャパン
- 出版日:
- 2015年09月18日頃
- ISBN:
- 9784873117362
- 在庫:
- メーカー取り寄せ
なぜ注目されているか
書籍紹介
ベストセラー「Effective C++」の C++11、C++14 に対応した改訂後継版!
初版発刊から 30 年以上経ったいまでも、C++ プログラマから絶大な支持を集め、ロングセラーを記録しているスコット・メイヤーズの名著『Effective C++』の改訂後継版。過去のメイヤーズの「Effective」シリーズと同様、優れた C++ プログラムはどのように書けばよいのかを指南。効果的かつ堅牢、移植性の高い優れた C++ プログラムを書くノウハウを 42 項目にまとめています。
技書の森解説
C++11 と C++14 で加わった機能を、知っている段階から誤りなく使える段階へ進めたい中上級者のための本が『Effective Modern C++』です。『Effective C++』の著者でもある Scott Meyers が書き、千住治郎が訳した日本語版で、オライリー・ジャパンから 2015 年 9 月 18 日に刊行されました。副題は「C++11/14 プログラムを進化させる 42 項目」で、版元は効果的かつ堅牢で移植性の高い C++ プログラムを書くノウハウを 42 項目にまとめた本と紹介しています。
全 8 章 42 項目、型推論から並行 API まで
本書は 1 章「型推論」から 8 章「もう一ひねり」までの 8 章で、42 の項目に通し番号が付いています。「明示的型宣言よりも auto を優先する」「0 や NULL よりも nullptr を優先する」のように、どちらを選ぶべきかを示す題の項目が並びます。1 章「型推論」はテンプレートと auto と decltype の型推論、2 章「auto」は明示的な型宣言より auto を優先する判断と、auto が期待と違う型を推論する場面の対処、3 章「現代の C++ への移行」は () と {} によるオブジェクト作成の違い、nullptr、エイリアス宣言、スコープ付きの enum、override、noexcept、constexpr、自動生成される特殊メンバ関数などを扱います。続く 4 章「スマートポインタ」、5 章「右辺値参照、ムーブセマンティクス、完全転送」、6 章「ラムダ式」、7 章「並行 API」と続き、8 章は値渡しと直接配置の 2 項目で締めくくられます。巻末には査読者あと書きと索引が付きます。項目ごとに主題が閉じているので、必要な項目から拾って読むこともできます。
スマートポインターとムーブが C++ で欠かせない理由
ガベージコレクション を持たない言語では、確保したメモリやファイルなどの資源を誰がいつ解放するのかを、プログラムの側で決める必要があります。C++ ではこの責任をオブジェクトの寿命に結び付け、デストラクタで解放する書き方が基本になります。std::unique_ptr は資源を 1 つの持ち主が独占する形、std::shared_ptr は参照の数を数えて最後の持ち主が解放する形、std::weak_ptr は共有された資源を寿命を延ばさずに観察する形を表します。ムーブセマンティクスは、使い終わる一時オブジェクトから中身を引き取ることでコピーの費用を避ける仕組みです。ただし std::move そのものは何も移動させず、右辺値として扱わせる変換にすぎません。テンプレートの T&& が右辺値参照にもなれば何でも受ける参照にもなるという規則は、本書が「ユニヴァーサル参照」と呼んで 5 章で詳しく扱う題材で、書き方を一つ誤るとコピーが残ったり、意図しない多重定義が選ばれたりします。
ラムダ式と並行 API に潜む落とし穴
ラムダ式から作られるオブジェクトは クロージャ で、周りの変数をどう取り込むかによって、ぶら下がった参照や意図しないコピーが生まれます。6 章は既定のキャプチャモードを避けることや、初期化キャプチャでオブジェクトをクロージャへムーブすること、std::bind よりラムダを選ぶことを項目として立てています。7 章はスレッドを直接扱うよりタスクを単位に書く考え方から始まり、std::launch::async の指定、std::thread の join、future、std::atomic と volatile の違いへ進みます。どの題材も、コンパイルは通るのに実行時の振る舞いだけが期待と違うという種類の誤りにつながりやすく、仕様を知っているだけでは避けにくい部分です。
C++ の中上級者が元を取れる場面と、向かない読者
版元は本書をさらに上を目指したい中上級者向けの一冊と案内しています。各項目は言語機能の説明から始める入門書の作りではないため、クラスやテンプレートを使った C++ のコードをある程度書いた経験が前提になります。プログラミングそのものが初めての人や、C++ の文法から学びたい人は、入門書を先に終えてから戻ってくるほうが効率的です。対象は副題のとおり C++11 と C++14 なので、それ以降の規格で加わった機能は別の資料で補う必要があります。版元の書籍ページには正誤表が掲載されているので、刷数を奥付で確かめて照らし合わせられます。
古い書き方の C++ コードを C++11 以降の書き方へ移したい人、コードレビューで auto や nullptr、スマートポインターを選ぶ理由を言葉で説明したい人にとって、42 の項目はそのまま判断の拠り所になります。ムーブや完全転送で一度でもつまずいた経験があるなら、5 章から読み始めるだけでも投じた時間を回収しやすい一冊です。
言及した記事 (13 件)
Effective Modern C++ メモ
♡ 240C++, C++11, C++14C++のつまずきポイント解説 その1
♡ 181C++11, C++14C++を学ぶにあたって参考にした書籍・Webサイト
♡ 158C++, C++11, C++14, C++規格書リーディングC++ラッパーを書く ~ C++の複雑怪奇な言語仕様を理解することによるメリット
♡ 94C++, AdventCalendarオレオレ技術書ロードマップ(ゲームプログラマ編)
♡ 78ゲーム, 技術書, 書籍, ゲームプログラミングどこでも食っていけるC++のソフトウェアエンジニアになるために
♡ 41C++, C++11C++の間違った知識に振り回されないために
♡ 39C++1年目にやったおすすめ教材
♡ 32初心者, 教材, 初学者向け, Udemy, 駆け出しエンジニアC++ プログラムを進化させる 4 項目
♡ 22C++, C++20C++11 をベースに考えよう
♡ 4Python, C++11, pybind11
この本に興味がある方におすすめ
関連する本
スコット・マイアーズ の他の書籍
関連記事
技術書の帯コピーの世界 - 煽り文句に隠されたマーケティング
「10 万部突破」「現場で使える」「これ 1 冊で完璧」。技術書の帯に書かれた煽り文句の法則と、帯が売上に与える影響を解説します。
ゼロから作る Deep Learning シリーズの読む順番 - 全 6 巻の内容と選び方を整理
ゼロから作る Deep Learning シリーズ全 6 巻 (基礎 / 自然言語処理 / フレームワーク / 強化学習 / 生成モデル / LLM) の読む順番を解説。各巻の内容 / 発売年 / 前提知識を一覧表で整理し、目的別にどの巻から読むべきかを案内します。
技術書のタイトルに隠された法則 - 「入門」「実践」「詳解」の意味を読み解く
技術書のタイトルに使われる「入門」「実践」「詳解」などのキーワードには暗黙のルールがあります。タイトルだけで本のレベルと内容を見抜くコツを紹介します。