Effective Modern C++

エフェクティブ モダン シープラスプラス

C++11 / 14 プログラムを進化させる 42 項目

Effective Modern C++の表紙
プログラミング
著者:
スコット・マイアーズ / 千住治郎(マイアーズ, スコット / センジュ, ジロウ)
出版社:
オライリー・ジャパン
出版日:
2015年09月18日頃
ISBN:
9784873117362
在庫:
メーカー取り寄せ
5(3 件 / 楽天ブックス)
上級者向け
C・C++・C#プログラミングC++ベストプラクティスソフトウェアエンジニアリングC++11C++14コード品質パフォーマンス最適化ソフトウェア設計エフェクティブシリーズ

なぜ注目されているか

言及数
210位
総合678位 ↑ 4 ランクアップ 言及 15 件・うち記事 13 件を掲載
01120222023202420252026

書籍紹介

ベストセラー「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 件)

この本に興味がある方におすすめ

関連する本

スコット・マイアーズ の他の書籍

関連記事

関連用語

共有: