Definitive C ++ Bookガイドとリスト


4243

この質問は、毎年発行されている数十の悪いC ++の本の中からいくつかの真珠を集めようとしています。

他の多くのプログラミング言語は、インターネットで見つけられるチュートリアルから頻繁に取り上げられますが、よく書かれたC ++の本を勉強せずにすばやくC ++を取り上げることができるものはほとんどありません。これを行うには大きすぎて複雑です。実際、それは非常に大きく複雑なので、非常に多くの非常に悪いC ++の本が世に出ています。そして、私たちは悪いスタイルについて話しているのではなく、明らかに明白な事実上のエラーをスポーツすること、非常に悪い悪いプログラミングスタイル促進することなどです

承認された回答を編集して、高品質の本とおおよそのスキルレベルを提供してください。できれば 、C ++チャットルームでの追加について話し合った後で行って ください。(常連が推薦に同意しない場合、常連は無慈悲にあなたの仕事を取り消すかもしれません。)あなたが個人的に読んだ/恩恵を受けた各本についての短い宣伝文/説明を追加してください。品質、見出しなどを自由に議論してください。基準を満たす書籍がリストに追加されます。CおよびC ++ユーザー協会(ACCU)によるレビューがある書籍には、レビューへのリンクがあります。

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

回答:


4893

初心者

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

  • C ++ Primer *(Stanley Lippman、JoséeLajoie、およびBarbara E. Moo)( C ++ 11用に更新)1kページで公開されている、これは非常にアクセスしやすい形式で言語のほぼすべてをカバーするC ++への非常に徹底的な入門ですそして非常に詳細に。第5版(2012年8月16日リリース)はC ++ 11をカバーしています。[レビュー]

  • プログラミング:C ++を使用した原則と実践(Bjarne Stroustrup、第2版-2014年5月25日)( C ++ 11 / C ++ 14用に更新)言語の作成者によるC ++を使用したプログラミングの紹介。これまでのプログラミング経験がないことを前提としていますが、初心者向けではありません。

*と混同しないC ++プライマープラスかなり不利で、(スティーブンプラータ)レビュー

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

  • C ++ツアー(Bjarne Stroustrup)( C ++ 17の第2版)「ツアー」は、すべての標準C ++(言語と標準ライブラリ、およびC ++の使用)のクイック(約180ページと14章)チュートリアルの概要です11)すでにC ++を知っているか、少なくとも経験豊富なプログラマーである人にとっては中程度のレベル。この本は、C ++プログラミング言語第4版の第2〜5章を構成する資料の拡張版です。

  • 高速化されたC ++(Andrew KoenigおよびBarbara Moo、第1版-2000年8月24日)これは基本的に C ++プライマーと同じ点をカバーしますが、その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 ++をお勧めします。[レビュー]

  • Effective Modern C ++(Scott Meyers)これは基本的に、C ++プログラマーがC ++ 03からC ++ 11およびC ++ 14に移行することを目的とした、 Effective C ++の新しいバージョンです。

  • 効果的なSTL(Scott Meyers)これは、STLからの標準ライブラリの一部に対して、 Effective C ++が言語全体に対して行ったことと同じことを行うことを目的としています。経験則とその根拠を示します。[レビュー]

中級

  • より効果的なC ++(Scott Meyers)効果的なC ++よりもさらに大まか経験則。最初の本ほど重要ではありませんが、知っておくと役に立ちます。

  • Exceptional C ++(Herb Sutter)パズルのセットとして提示され、これは、さまざまなリソースの詳細なカバレッジに加えて、リソースの取得による初期化(RAII)によるC ++での適切なリソース管理と例外の安全性について最良かつ徹底的な議論の1つを持っていますpimplイディオム、名前のルックアップ、適切なクラス設計、C ++メモリモデルなど、他のトピックの一覧です。[レビュー]

  • More Exceptional C ++(Herb Sutter) C ++での効果的なオブジェクト指向プログラミングとSTLの正しい使用法の説明に加えて、 Exceptional C ++でカバーされていない追加の例外安全トピックをカバーします[レビュー]

  • 例外的なC ++スタイル(Herb Sutter)一般的なプログラミング、最適化、およびリソース管理について説明します。この本には、非メンバー関数と単一責任の原則を使用して、C ++でモジュラーコードを記述する方法についても説明されています。[レビュー]

  • C ++コーディング標準(Herb SutterおよびAndrei Alexandrescu)ここでの「コーディング標準」は、「コードをインデントする必要があるスペースの数」という意味ではありません。この本には、101個のベストプラクティス、イディオム、およびよくある落とし穴が含まれており、正しく、理解しやすく、効率的なC ++コードの記述に役立ちます。[レビュー]

  • C ++テンプレート:完全ガイド(David VandevoordeおよびNicolai M. Josuttis)これは C ++ 11より前に存在していたテンプレートに関する本です。非常に基本的なものから最も高度なテンプレートメタプログラミングまですべてをカバーし、テンプレートの動作の詳細(概念的および実装方法の両方)を説明し、多くの一般的な落とし穴について説明します。付録には、One Definition Rule(ODR)とオーバーロード解決の優れた要約があります。C ++ 11、C ++ 14、C ++ 17をカバーする第2版はすでに公開されています。[レビュー]

  • C ++ 17-完全なガイド(Nicolai M. Josuttis)この本では、C ++ 17標準で導入されたすべての新機能について説明します。「インライン変数」、「constexpr if」から「ポリモーフィック」までのすべてのシンプルな機能をカバーしています。メモリリソース」と「オーバーアライメントされたデータを含む新規および削除」。


上級

  • Modern C ++ Design(Andrei Alexandrescu)高度な汎用プログラミング手法に関する画期的な本。ポリシーベースのデザイン、タイプリスト、および基本的な一般的なプログラミングイディオムを紹介し、一般的なプログラミングを使用して効率的、モジュール化、およびクリーンに実装できる便利なデザインパターン(小さなオブジェクトアロケーター、ファンクター、ファクトリー、ビジター、マルチメソッドを含む)の数を説明します。 。[レビュー]

  • C ++テンプレートメタプログラミング(David AbrahamsおよびAleksey Gurtovoy)

  • C ++ Concurrency In Action(Anthony Williams)スレッドライブラリ、アトミックライブラリ、C ++メモリモデル、ロックとミューテックス、およびマルチスレッドアプリケーションの設計とデバッグの問題を含むC ++ 11同時実行サポートをカバーする本。C ++ 14とC ++ 17をカバーする第2版はすでに公開されています。

  • 高度なC ++メタプログラミング(Davide Di Gennaro)理論よりも実践に重点を置いた、TMPテクニックのC ++ 11以前のマニュアル。この本にはたくさんのスニペットがあり、そのうちのいくつかはタイプの特性によって時代遅れになっていますが、それでもテクニックは知っておくと役に立ちます。風変わりなフォーマット/編集に我慢できれば、Alexandrescuよりも読みやすく、間違いなくやりがいがあります。経験豊富な開発者にとっては、C ++の暗いところ(奇妙なところ)について何かを拾う可能性が高いです。

  • C ++での関数型プログラミング(IvanČukić)この本では、読者に最新のC ++の関数型パラダイムを紹介しています。理論とコードの側面をさまざまな例と図でカバーしています。著者は教育の経験があり、関数型プログラミングのさまざまな側面を通して読者をスムーズに導くためにそれを使用します。


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

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用に更新)これらは、次の企業が提供する3日間のトレーニングコースのプレゼンテーション資料(スライドといくつかの講義ノート)です。 C ++で非常に尊敬されている作家であるスコットマイヤーズ。アイテムのリストは短いですが、品質は高いです。

  • C ++コアガイドライン(C ++ 11月14日/ 17 / ...) (ビャーネ・ストロヴストルップとハーブサッター編)現代のC ++だけでなくを使用するためのガイドラインのセットからなる進化するオンラインドキュメントです。ガイドラインは、インターフェース、リソース管理、メモリ管理、およびアプリケーションアーキテクチャとライブラリ設計に影響を与える同時実行性など、比較的上位の問題に焦点を当てています。このプロジェクトは、Bjarne Stroustrup氏などによってCppCon'15発表され、コミュニティからの貢献を歓迎しています。ほとんどのガイドラインには、根拠と例、および可能なツールサポートの説明が補足されています。多くのルールは、静的分析ツールで自動的にチェックできるように特別に設計されています。

  • C ++スーパーFAQ(マーシャルクライン、ビャーネ・ストロヴストルップなど)は、以前にマーシャルクラインとビャーネ・ストロヴストルップによって個別に維持され、また、新たな貢献を組み込んだC ++ FAQを統一するために、標準的なC ++財団によって努力です。アイテムは主に中級レベルの問題に対処し、ユーモラスな口調で書かれることがよくあります。すべてのアイテムがC ++標準の最新版で完全に最新であるとは限りません。

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


クラシック/古い

注:これらの本に含まれている一部の情報は最新ではないか、ベストプラクティスとは見なされなくなっています。

  • C ++の設計と進化(Bjarne Stroustrup)言語が現状のままである理由を知りたい場合は、この本で答えを見つけることができます。これは、C ++の標準化前のすべてをカバーしています。

  • C ++の反芻 -(Andrew KoenigおよびBarbara Moo) [レビュー]

  • 高度なC ++プログラミングスタイルとイディオム(James Coplien)パターンムーブメントの前身であり、多くのC ++固有の「イディオム」について説明しています。これは確かに非常に優れた本であり、時間を節約できれば読む価値があるかもしれませんが、かなり古く、現在のC ++では最新ではありません。

  • 大規模なC ++ソフトウェア設計(John Lakos)Lakosは、非常に大きなC ++ソフトウェアプロジェクトを管理する手法について説明しています。確かに、それが最新の情報だったとしても、良い読み物です。C ++ 98よりもずっと前に書かれており、大規模なプロジェクトに重要な多くの機能(名前空間など)がありません。大規模なC ++ソフトウェアプロジェクトで作業する必要がある場合は、それを読みたいと思うかもしれませんが、それを一気に理解する必要はありません。新版第1巻は 2019年に発売

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

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

  • C ++で考える(ブルースエッケル、第2版、2000)。2巻。入門レベルの本のチュートリアル形式の無料セットです。ダウンロード:巻1巻2。残念ながら、それらはいくつかの些細なエラー(例えば、一時的なものを自動的に維持するconst)によって損なわれ、公式のエラッタリストはありません。サードパーティの正誤表の一部は( http://www.computersciencelab.com/Eckel.htm)で入手できますが、維持されていないようです。

  • Scientific and Engineering C ++:An Introduction to Advanced Techniques and Examples(John Barton and Lee Nackman)これは、数値メソッドのコンテキストで、C ++で利用可能なすべての機能を説明して利用しようとした、包括的で非常に詳細な本です。それは、奇妙な繰り返しテンプレートパターン(CRTP、Barton-Nackmanトリックとも呼ばれます)など、いくつかの新しい手法を当時導入しました。次元分析や自動微分などのいくつかの技術を開拓しました。式パーサーからラパックラッパーまで、コンパイル可能で便利なコードが多数付属しています。コードはまだここにあります: http : //www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934。残念ながら、本はスタイルとC ++機能が多少古くなっていますが、当時(1994年、STL以前)は信じられないほど強力でした。ダイナミクス継承に関する章は、理解するのが少し複雑であまり役に立ちません。移動のセマンティクスとSTLから学んだ教訓を含む、この古典的な本の更新されたバージョンは非常に素晴らしいでしょう。


402
@G Rassovsky:Y時間でXを教えることを約束するすべての本。たとえば、24時間でC ++を学びましょう。そのような本はすべて避けた方がよいと思います。
akhil_mittal 14

115
私は誰の靴にも足を踏み入れるのは嫌いですが、私は彼の資料を無料でオンラインで公開した著者を尊重していますが、ブルース・エッケルの「Thinking in C ++」はお勧めしません。この本の見方は、C ++および「オブジェクト指向」プログラミングの比較的貧弱または非効率的な使用を示唆しており、GoFデザインパターンの不適切なアプリケーションに似ています。プログラミング全般については興味深い入門書だと思いましたが、誰かがプログラミングや(特に)コンピュータサイエンス全体に慣れてくると、純粋に「古典的な」OOP用語で教育に不利に考える本を見つけます。

30
accu.orgウェブサイトの@ G.Rassovskyには、評価付きの書評セクションがあります。C ++のものを検索できます。それらの多くは「非推奨」と評価されています。
Zaphod Beeblebrox

83
Accelerated C ++は2000年のものです。古くなっているのではないでしょうか。
AutonomousApps

60
エディションの発行日(該当する場合はエディション番号を含む)を記載するとよいと思います。
アーロンホール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.