ISBN 9784048930710
江添亮のC++入門
概要
知識のブートストラップ方式でC++を基礎から実装レベルまで習得する
想定読者
他言語の経験があり、C++を体系的に学び直したいプログラマー。ポインター・ムーブセマンティクス・テンプレートまで一冊で到達したい人。
こんな人には向いていない
- プログラミング自体が初めての完全初学者(変数・ループなどの概念理解が前提となる章構成のため)
- すでにEffective C++等でC++中級以上の経験がある人には基礎比重が大きすぎる
- コンパイル・デバッグ環境をすでに整備済みで、言語仕様リファレンスを求める人には向かない
読了後にできるようになること
- Makefileを使ったビルドとコンパイルエラーメッセージの読み解き方
- lvalueリファレンス・rvalueリファレンス・ムーブセマンティクスの動作原理
- テンプレートを使った汎用コンテナ(vectorなど)の実装手順
- スマートポインターによる安全な動的メモリ管理
- ラムダ式とイテレーターを組み合わせたSTLアルゴリズムの活用
- C++17/C++20に至るモダンC++の機能を意識した現代的なコードスタイル
本書のキー概念(章解説)
- 第 1 章 C++の概要
- 第 2 章 C++の実行
- 第 3 章 C++ヒッチハイクガイド
- 第 4 章 デバッグ:コンパイルエラーメッセージの読み方 — コンパイルエラーへの対処を序盤で学ぶ構成が独特。初読時に通しておくと後半の詰まりが減る
- 第 5 章 条件分岐の果てのレストラン
- 第 6 章 デバッグ:コンパイル警告メッセージ
- 第 7 章 最近体重が気になるあなたのための標準入力
- 第 8 章 ループ
- 第 9 章 メモリーを無限に確保する
- 第 14 章 イテレーターの基礎
- 第 15 章 lvalueリファレンスとconst
- 第 16 章 アルゴリズム
- 第 17 章 ラムダ式
- 第 18 章 クラスの基本
- 第 23 章 テンプレート
- 第 27 章 ポインター — 本書の要とも言える章。前後の章を理解してから戻ると定着しやすい
- 第 29 章 動的メモリー確保
- 第 33 章 ムーブ — C++固有の概念で最も躓きやすい箇所。34・35章とセットで読む
- 第 34 章 rvalueリファレンス
- 第 35 章 ムーブの実装
- 第 36 章 スマートポインター
- 第 39 章 乱数
- 第 41 章 分割コンパイル
- 第 42 章 デバッガー
ハイライト
- 本書は、次の規格として標準化が進められているC++20を意識しながら、現行の規格に準拠したC++プログラムの書き方を徹底的に解説していく。(C++20を視野に入れた現代的なアプローチであることを端的に示す記述)
- 解説を進めるに当たっては、その時点で学習した知識だけを利用して新しい知識を学ぶ方法(知識のブートストラップ)が意識されており、プログラミング初心者であっても新しい機能、知識の理解を無理なく行えるようになっている。(教授設計の独自性を示す核心部分。循環参照なく順序良く学べる構成方針が明示されている)
- 本の全文がGPLv3ライセンスでネット上に公開されている(読者が購入前に内容を確認できる点として複数の記事で言及されている事実)
外部からの言及
- 複数の記事でiPad/Dockerなど特定環境でのC++学習リソースとして紹介されており、全文がGPLv3でWeb公開されている点が読者の利便性として評価されている(qiita)
- C++を体系的に学ぶ際の参考書として章レベルで参照されており、乱数・プリプロセッサ・__has_includeなど特定機能の解説を他のチュートリアルが補強資料として引用するパターンが見られる(qiita)
- 著者の江添亮はC++標準化委員会メンバーとして高く評価されており、C++完全理解ガイドなど人気記事が本書出版前後に推薦先として著者名を挙げている(qiita)
編集メモ
Qiita 直接言及 5件 / 累計 likes 約69 / タイトル直接引用記事は少ないが、C++完全理解ガイド(827 likes)など複数の人気記事で著者名や本書が推薦書として参照されている。C++入門書カテゴリでの認知度は一定程度あるが、Qiita signal 単体では essential 基準(article_count>=10, likes>=200)に達しない
読む前に押さえておきたいこと
- 任意の言語でのプログラミング基礎(変数・条件分岐・ループ・関数の概念)
- コマンドラインの基本操作(ファイル作成・ディレクトリ移動・コマンド実行)
- テキストエディタでのソースファイル編集
学習のコツ
- デバッグ章(第4・6・10・42章)が本文中に分散配置されている。コンパイルエラーへの対処法を序盤で押さえてから後続の実装章に進むと、詰まったときの自己解決力が大きく変わる
- ムーブ関連(第33〜35章)はC++固有の概念で最も難解。第27章(ポインター)と第29章(動的メモリー)を確実に理解してから取り組むと消化しやすい
- 全文がGPLv3ライセンスでWeb公開されている(https://ezoeryou.github.io/cpp-intro/)。通勤・移動中はWeb版を参照し、手元でコードを動かす時間は書籍と対照させる使い分けが効果的
- vectorの実装(第30〜31章)はテンプレート・ポインター・ムーブが統合される集大成的な章。前段の各概念を復習しながら実装を追うと体系が整理される
出版社による内容紹介
効率性と柔軟性を兼ね備えたプログラミング言語として進化を続けるC++。本書は、次の規格として標準化が進められているC++20を意識しながら、現行の規格に準拠したC++プログラムの書き方を徹底的に解説していく。プログラミング経験者を主要な対象としているが、解説を進めるに当たっては、その時点で学習した知識だけを利用して新しい知識を学ぶ方法(知識のブートストラップ)が意識されており、プログラミング初心者であっても新しい機能、知識の理解を無理なく行えるようになっている。C++の実行、デバッグ、基本的な文法、アルゴリズム、オブジェクト指向、テンプレート、メモリ管理、乱数など、C++による本格的なプログラム開発に必須の知識を網羅した本格的な入門書である。 第1章 C++の概要 第2章 C++の実行 第3章 C++ヒッチハイクガイド 第4章 デバッグ:コンパイルエラーメッセージの読み方 第5章 条件分岐の果てのレストラン 第6章 デバッグ:コンパイル警告メッセージ 第7章 最近体重が気になるあなたのための標準入力 第8章 ループ 第9章 メモリーを無限に確保する 第10章 デバッグ:printfデバッグ 第11章 整数 第12章 浮動小数点数 第13章 名前 第14章 イテレーターの基礎 第15章 lvalueリファレンスとconst 第16章 アルゴリズム 第17章 ラムダ式 第18章 クラスの基本 第19章 より自然に振る舞うクラス 第20章 std::array 第21章 プログラマーの三大美徳 第22章 配列 第23章 テンプレート 第24章 arrayをさらに実装 第25章 arrayのイテレーター 第26章 傲慢なエラー処理:例外 第27章 ポインター 第28章 イテレーター詳細 第29章 動的メモリー確保 第30章 vectorの実装:基礎 第31章 vectorの実装:メモリー確保 第32章 コピー 第33章 ムーブ 第34章 rvalueリファレンス 第35章 ムーブの実装 第36章 スマートポインター 第37章 自作の数値クラスで演算をムーブに対応する方法 第38章 文字列 第39章 乱数 第40章 Cプリプロセッサー 第41章 分割コンパイル 第42章 デバッガー
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。