4235

この質問は、毎年出版される数十冊の悪い C++ 書籍の中から、数少ない真珠を集めようとしています。

外出先でインターネット上のチュートリアルから学ぶことが多い他の多くのプログラミング言語とは異なり、よく書かれた C++ の本を勉強せずにすぐに C++ を習得できる人はほとんどいません。これを行うには、大きすぎて複雑すぎます。実際、C++ は非常に大規模で複雑なため、非常に質の悪い C++ の本がたくさん出回っています。そして、私たちは悪いスタイルについて話しているのではなく、明白な事実上の誤りを誇示したり、ひどく悪いプログラミングスタイルを促進したりするようなものです.

承認された回答を編集して、質の高い本とおおよそのスキル レベル提供し ください。(レギュラーは、推奨事項に同意しない場合、容赦なくあなたの仕事を元に戻す可能性があります。) あなたが個人的に読んだ/恩恵を受けた各本について、短い宣伝文句/説明を追加します。品質、見出しなどについて自由に議論してください。基準を満たす本はリストに追加されます。Association of C and C++ Users (ACCU) によるレビューがある書籍には、レビューへのリンクがあります。

*注意: FAQ およびその他のリソースは、C++ タグ情報およびの下にあります。

4

1 に答える 1

5542

初心者

入門用、以前のプログラミング経験なし

著者 説明 レビュー
C++ Primer * * C++ Primer Plus (Stephen Prata)

と混同しないでください。
Stanley Lippman、Josée Lajoie、Barbara E. Moo ( C++11 用に更新) 1,000 ページに及ぶこの本は、言語のほぼすべてを非常にアクセスしやすい形式で非常に詳細にカバーする、C++ の非常に徹底的な紹介です。第 5 版 (2012 年 8 月 16 日リリース) は C++11 をカバーしています。 [レビュー]
プログラミング: C++ を使用した原則と実践 Bjarne Stroustrup、第 2 版 - 2014 年 5 月 25 日 ( C++11/C++14 用に更新) 言語の作成者による C++ を使用したプログラミングの紹介。これまでのプログラミング経験がないことを前提としていますが、初心者だけのものではありません。

入門、以前のプログラミング経験

著者 説明 レビュー
C++ のツアー Bjarne Stroustrup ( C++17 の第 2 版) 「ツアー」は、C++を既に知っているか、少なくとも経験豊富なプログラマー。この本は、C++ プログラミング言語第 4 版の第 2 章から第 5 章を構成する資料の拡張版です。
高速化された C++ Andrew Koenig および Barbara Moo、初版 - 2000 年 8 月 24 日 これは基本的にC++ Primerと同じ領域をカバーしますが、そのスペースの 4 分の 1 でカバーします。これは主に、プログラミングの入門ではなく、以前に他の言語でプログラミングしたことがある人向けのC++の入門であるためです。学習曲線は急勾配ですが、これに対処できる人にとっては、言語への非常にコンパクトな紹介です. (歴史的に、言語を教えるために現代的なアプローチを使用する最初の初心者向けの本であることによって、新境地を開拓しました。) それにもかかわらず、それが教えている C++ は純粋に C++98 です。 [レビュー]

ベストプラクティス

著者 説明 レビュー
効果的な C++ Scott Meyers、第 3 版 - 2005 年 5 月 22 日 これは、C++ プログラマーが読むべき最高の 2 冊目の本になることを目的として書かれ、成功しました。以前の版は C 出身のプログラマー向けでしたが、第 3 版ではこれが変更され、Java などの言語出身のプログラマーを対象としています。非常にアクセスしやすい (そして楽しい) スタイルで、約 50 の覚えやすい経験則とその理論的根拠を提示します。C++11 および C++14 の場合、例といくつかの問題が古くなっているため、Effective Modern C++ を優先する必要があります。 [レビュー]
効果的な最新の C++ スコット・マイヤーズ この本は、C++03 から C++11 および C++14 に移行する C++ プログラマーを対象としています。この本は、前の本「Effective C++」の一部の続きと「訂正」のように扱うことができます。それらは同じものを扱っているわけではありませんが、同様のアイテムベースのテーマを維持しています.
実効STL スコット・マイヤーズ これは、 Effective C++が言語全体に対して行ったのと同じことを、STL に由来する標準ライブラリの一部に対して行うことを目的としています。経験則とその理論的根拠を提示します。 [レビュー]

中級

著者 説明 レビュー
より効果的な C++ スコット・マイヤーズ 効果的な C++よりも多くの経験則があります。最初の本ほど重要ではありませんが、知っておくとよいでしょう。
優れた C++ ハーブサッター 一連のパズルとして提示された本書は、適切なリソース管理と Resource Acquisition is Initialization (RAII) による C++ での例外の安全性に関する最良かつ徹底的な議論の 1 つです。イディオム、名前検索、優れたクラス設計、および C++ メモリ モデル。 [レビュー]
より優れた C++ ハーブサッター C++での効果的なオブジェクト指向プログラミングと STL の正しい使用法についての説明に加えて、Exceptional C++で取り上げられていない追加の例外安全性トピックを取り上げます。 [レビュー]
優れた C++ スタイル ハーブサッター 一般的なプログラミング、最適化、およびリソース管理について説明します。この本には、非メンバー関数と単一責任の原則を使用して、C++ でモジュラー コードを記述する方法についての優れた説明もあります。 [レビュー]
C++ コーディング標準 ハーブ・サッターとアンドレイ・アレクサンドレスク ここでの「コーディング標準」は、「コードをインデントする必要があるスペースの数」を意味するものではありません。この本には、正しく、理解しやすく、効率的な C++ コードを作成するのに役立つ 101 のベスト プラクティス、イディオム、よくある落とし穴が含まれています。 [レビュー]
C++ テンプレート: 完全ガイド David Vandevorde と Nicolai M. Josuttis これは C++11 より前に存在していたテンプレートに関する本です。非常に基本的なものから最も高度なテンプレート メタプログラミングまですべてをカバーし、テンプレートがどのように機能するか (概念と実装方法の両方) のすべての詳細を説明し、多くの一般的な落とし穴について説明します。付録に、One Definition Rule (ODR) と過負荷解決の優れた要約があります。C++11、C++14、および C++17 をカバーする第 2 版が既に発行されています。 [レビュー]
C++ 17 - 完全ガイド ニコライ・M・ヨシュティス この本では、「インライン変数」、「constexpr if」などの単純なものから、「ポリモーフィック メモリ リソース」、「オーバーアラインされたデータによる新規および削除」まで、C++17 標準で導入されたすべての新機能について説明します。 '。 [レビュー]
C++ 20 - 完全ガイド ニコライ・M・ヨシュティス この本は、C++20 のすべての新しい言語とライブラリ機能を紹介しています。各新機能の動機と背景について、例と背景情報とともに説明します。これらの機能が日常のプログラミングにどのように影響するか、それらを組み合わせることが何を意味するか、そして実際に C++20 をどのように活用するかに焦点を当てています。(この本は段階的に公開されていることに注意してください。)
C++ イン アクション バルトシュ・ミレフスキ この本は、ゼロからアプリケーションを構築することによって、C++ とその機能を説明しています。 [レビュー]
C++ での関数型プログラミング イヴァン・チュキッチ この本は、最新の C++ (C++11 以降) に関数型プログラミングの手法を紹介します。関数型プログラミングのパラダイムを C++ に適用したい人にとっては、非常に良い読み物です。

高度

著者 説明 レビュー
最新の C++ 設計 アンドレイ・アレクサンドレスク 高度なジェネリック プログラミング手法に関する画期的な本。ポリシーベースの設計、型リスト、および基本的なジェネリック プログラミングのイディオムを紹介し、ジェネリック プログラミングを使用して、効率的かつモジュール式にクリーンに実装できる有用な設計パターン (小さなオブジェクト アロケーター、ファンクター、ファクトリ、ビジター、およびマルチメソッドを含む) の数を説明します。 . [レビュー]
C++ テンプレート メタプログラミング デビッド・エイブラハムズとアレクセイ・グルトヴォイ
C++ 同時実行の実行 アンソニー・ウィリアムズ スレッド ライブラリ、アトミック ライブラリ、C++ メモリ モデル、ロックとミューテックス、およびマルチスレッド アプリケーションの設計とデバッグの問題を含む C++11 の同時実行サポートをカバーする本。C++14 と C++17 をカバーする第 2 版が既に発行されています。 [レビュー]
高度な C++ メタプログラミング ダビデ・ディ・ジェンナーロ C++11 より前の TMP テクニックのマニュアルで、理論よりも実践に重点を置いています。この本にはたくさんのスニペットがあり、そのうちのいくつかは型の特徴によって時代遅れになっていますが、テクニックはそれでも知っておくと役に立ちます。風変わりな書式設定/編集に我慢できれば、Alexandrescu よりも読みやすく、間違いなくよりやりがいがあります。より経験豊富な開発者の場合、C++ の暗い隅 (癖) について何かを理解できる可能性が高くなります。これは、通常、豊富な経験によってのみ得られます。
大規模 C++ ボリューム I、プロセスとアーキテクチャ(2020) ジョン・ラコス 古い本「Large Scale C++ Design」を拡張した 3 部構成のシリーズの第 1 部。Lakos は、非常に大規模な C++ ソフトウェア プロジェクトを管理するための実戦でテスト済みの手法について説明しています。大規模な C++ ソフトウェア プロジェクトで作業している場合は、物理構造と論理構造の関係、コンポーネントの戦略、およびそれらの再利用について詳しく説明している、優れた読み物です。 [レビュー]

参照スタイル - すべてのレベル

著者 説明 レビュー
C++ プログラミング言語 Bjarne Stroustrup ( C++11 用に更新) その作成者による C++ の古典的な紹介。古典的な K&R と並行して書かれていますが、これは実によく似ており、コア言語から標準ライブラリ、プログラミング パラダイム、言語の哲学まで、ほぼすべてをカバーしています。 [レビュー]
注: C++ 標準のすべてのリリースは、「現在の C または C++ 標準ドキュメントはどこにありますか?」という質問で追跡されます。
C++ 標準ライブラリのチュートリアルとリファレンス Nicolai Josuttis ( C++11 用に更新) C++ 標準ライブラリの紹介とリファレンス。第 2 版 (2012 年 4 月 9 日リリース) は C++11 をカバーしています。 [レビュー]
C++ IO ストリームとロケール アンジェリカ・ランガーとクラウス・クレフト ストリームとロケールについて何か知りたい場合は、決定的な答えが見つかる唯一の場所であることを除けば、この本についてはほとんど語ることはありません。 [レビュー]

C++11/14/17/… 参考文献:

  • C++ 11 / 14 / 17標準 (INCITS/ISO/IEC 14882:2011/2014/2017)もちろん、これは C++ であるかどうかの最終決定者です。ただし、十分な時間と労力を費やして理解することをいとわない経験豊富なユーザー向けの参考資料としてのみ意図されていることに注意してください。C++17 標準は、198 スイス フランの電子形式でリリースされます。

  • C++17 標準は入手可能ですが、経済的な形ではないようです。ISO から直接入手すると、 198 スイス フラン (約 200 米ドル) かかります。ほとんどの人にとって、標準化前の最終ドラフトは十分すぎるほどです (そして無料です)。多くの人は、C++20 に含まれる可能性が高い新機能を文書化した、さらに新しいドラフトを好むでしょう。

  • 新しい C++ の概要 (C++11/14) (PDF のみ) (Scott Meyers) ( C++14 用に更新) C++ に関して非常に尊敬されている著者である Scott Meyers 氏。品数は少ないですが、クオリティは高いです。

  • C++ コア ガイドライン (C++11/14/17/…) ( Bjarne Stroustrup と Herb Sutter が編集) は、最新の C++ を適切に使用するための一連のガイドラインで構成されるオンライン ドキュメントです。このガイドラインは、インターフェイス、リソース管理、メモリ管理、およびアプリケーション アーキテクチャとライブラリ設計に影響を与える同時実行性など、比較的高レベルの問題に焦点を当てています。このプロジェクトは、Bjarne Stroustrup などによって CppCon'15 で発表され、コミュニティからの貢献を歓迎します。ほとんどのガイドラインには、理論的根拠と例、および可能なツールのサポートに関する議論が補足されています。多くのルールは、静的分析ツールによって自動的にチェックできるように特別に設計されています。

  • C++ Super-FAQ (Marshall Cline、Bjarne Stroustrup など) は、以前 Marshall Cline と Bjarne Stroustrup によって個別に維持され、新しい貢献も取り入れた C++ FAQ を統合するための Standard C++ Foundation による取り組みです。アイテムは主に中級レベルの問題に対処しており、ユーモラスな口調で書かれていることがよくあります。すべての項目が C++ 標準の最新版に完全に対応しているわけではありません。

  • cppreference.com (C++03/11/14/17/…) (Nate Kohl によって開始) は、基本的なコア言語機能をまとめた wiki であり、C++ 標準ライブラリの広範なドキュメントがあります。ドキュメントは非常に正確ですが、公式の標準ドキュメントよりも読みやすく、Wiki の性質によりナビゲーションが改善されています。このプロジェクトは C++ 標準のすべてのバージョンを文書化しており、このサイトでは特定のバージョンの表示をフィルタリングできます。このプロジェクトは、CppCon'14 で Nate Kohl によって発表されました


古典/古い

注:これらの書籍に含まれる一部の情報は、最新ではないか、ベスト プラクティスとは見なされていない可能性があります。

  • The Design and Evolution of C++ (Bjarne Stroustrup) 言語がなぜそのようになっているのかを知りたい場合は、この本で答えを見つけることができます。これは、C++の標準化以前のすべてをカバーしています

  • C++ に関する反省- (Andrew Koenig と Barbara Moo) [レビュー]

  • Advanced C++ Programming Styles and Idioms (James Coplien) パターン運動の前身であり、多くの C++ 固有の「イディオム」について説明しています。これは確かに非常に優れた本であり、時間を割くことができれば読む価値があるかもしれませんが、かなり古く、現在の C++ では最新ではありません。

  • 大規模 C++ ソフトウェア設計(John Lakos) Lakos は、非常に大規模な C++ ソフトウェア プロジェクトを管理するためのテクニックについて説明しています。確かに、それが最新のものであれば、良い読み物です。これは C++ 98 よりずっと前に書かれたものであり、大規模なプロジェクトにとって重要な多くの機能 (名前空間など) が欠けています。大規模な C++ ソフトウェア プロジェクトに取り組む必要がある場合は、それを読みたいと思うかもしれません。拡張およびその後の書籍シリーズであるラージ スケール C++ ボリューム I ~ III と混同しないでください。

  • C++ オブジェクト モデルの内部(Stanley Lippman) 仮想メンバー関数が一般的にどのように実装されているか、多重継承のシナリオでベース オブジェクトが一般的にどのようにメモリ内に配置されているか、およびこれらすべてがパフォーマンスにどのように影響するかを知りたい場合は、ここを参照してください。そのようなトピックの徹底的な議論を見つけてください。

  • 注釈付き C++ リファレンス マニュアル(Bjarne Stroustrup、Margaret A. Ellis) この本は、1989 年の C++ 2.0 バージョン (テンプレート、例外、名前空間、および新しいキャストがまだ導入されていない) を調査しているという点で、かなり時代遅れです。とはいえ、この本では当時の C++ 標準全体を網羅し、理論的根拠、可能な実装、および言語の機能を説明しています。これは、C++ のプログラミングの原則とパターンを学ぶための本ではなく、C++ 言語のあらゆる側面を理解するための本です。

  • C++ で考える(Bruce Eckel、第 2 版、2000 年)。2巻; 入門レベルの書籍のチュートリアル スタイルの無料セットです。ダウンロード:第 1巻、第 2 巻。残念ながら、const公式の正誤表のリストがなく、多くの些細なエラー (たとえば、一時変数を automatic に維持すること) によって損なわれています。http://www.computersciencelab.com/Eckel.htmでサードパーティのエラータ リストの一部が、メンテナンスされていないようです。

  • Scientific and Engineering C++: An Introduction to Advanced Techniques and Examples (John Barton および Lee Nackman) 数値計算法のコンテキストで、C++ で利用可能なすべての機能を説明し、活用しようとした、包括的で非常に詳細な本です。当時、Curiously Recurring Template Pattern (CRTP、Barton-Nackman トリックとも呼ばれる) など、いくつかの新しい手法が導入されました。次元分析や自動微分などのいくつかの手法を開拓しました。式パーサーから Lapack ラッパーに至るまで、コンパイル可能で便利なコードが多数付属しています。コードは引き続きオンラインで入手できます. 残念なことに、書籍のスタイルと C++ 機能はやや時代遅れになっていますが、当時 (1994 年、STL 以前) は驚くべき傑作でした。ダイナミクスの継承に関する章は、理解するのが少し複雑で、あまり役に立ちません。移動のセマンティクスと STL から学んだ教訓を含む、この古典的な本の更新版は非常に優れています。

于 2008-12-23T05:52:48.530 に答える