Le guide définitif du livre C ++ et la liste

4243

Cette question tente de collecter les quelques perles parmi les dizaines de mauvais livres C ++ publiés chaque année.

Contrairement à de nombreux autres langages de programmation, qui sont souvent repris sur le pouce à partir de didacticiels trouvés sur Internet, peu sont capables de prendre rapidement C ++ sans étudier un livre C ++ bien écrit. C'est beaucoup trop grand et complexe pour cela. En fait, il est si grand et complexe qu'il existe de très nombreux livres C ++ très mauvais . Et nous ne parlons pas de mauvais style, mais de choses comme arborer des erreurs factuelles manifestement évidentes et promouvoir des styles de programmation extrêmement mauvais .

Veuillez modifier la réponse acceptée pour fournir des livres de qualité et un niveau de compétence approximatif - de préférence après avoir discuté de votre ajout dans la salle de chat C ++ . (Les habitués pourraient sans pitié défaire votre travail s'ils ne sont pas d'accord avec une recommandation.) Ajoutez une courte description / description de chaque livre que vous avez personnellement lu / bénéficié. N'hésitez pas à débattre de la qualité, des titres, etc. Les livres répondant aux critères seront ajoutés à la liste. Les livres qui ont des critiques par l'Association des utilisateurs C et C ++ (ACCU) ont des liens vers la critique.

* Remarque: les FAQ et autres ressources peuvent être trouvées dans les informations de balise C ++ et sous.

sbi
la source

Réponses:

4897

Débutant

Introduction, aucune expérience de programmation précédente

  • C ++ Primer * (Stanley Lippman, Josée Lajoie et Barbara E. Moo) ( mis à jour pour C ++ 11 ) Avec 1k pages, c'est une introduction très approfondie en C ++ qui couvre à peu près tout dans la langue dans un format très accessible et dans les moindres détails. La cinquième édition (publiée le 16 août 2012) couvre C ++ 11. [La revue]

  • Programmation: principes et pratique en utilisant C ++ (Bjarne Stroustrup, 2e édition - 25 mai 2014) ( mise à jour pour C ++ 11 / C ++ 14 ) Une introduction à la programmation en C ++ par le créateur du langage. Une bonne lecture, qui ne suppose aucune expérience de programmation précédente, mais n'est pas réservée aux débutants.

* À ne pas confondre avec C ++ Primer Plus (Stephen Prata), avec une critique nettement moins favorable .

Introduction, avec une expérience de programmation précédente

  • A Tour of C ++ (Bjarne Stroustrup) ( 2nd edition for C ++ 17 ) The "tour" is a quick (about 180 pages and 14 chapitres) tutorial overview of all of standard C ++ (language and standard library, and using C ++) 11 ) à un niveau modérément élevé pour les personnes qui connaissent déjà le C ++ ou du moins sont des programmeurs expérimentés. Ce livre est une version étendue du matériel qui constitue les chapitres 2 à 5 du langage de programmation C ++, 4e édition.

  • C ++ accéléré (Andrew Koenig et Barbara Moo, 1ère édition - 24 août 2000) Cela couvre essentiellement le même terrain que le C ++ Primer , mais le fait sur un quart de son espace. C'est en grande partie parce qu'il ne tente pas d'être une introduction à la programmation , mais une introduction au C ++ pour les personnes qui ont déjà programmé dans un autre langage. Il a une courbe d'apprentissage plus abrupte, mais, pour ceux qui peuvent y faire face, c'est une introduction très compacte à la langue. (Historiquement, il a innové en étant le premier livre pour débutants à utiliser une approche moderne de l'enseignement de la langue.) Malgré cela, le C ++ qu'il enseigne est purement C ++ 98. [La revue]

Les meilleures pratiques

  • C ++ efficace (Scott Meyers, 3e édition - 22 mai 2005) Ceci a été écrit dans le but d'être le meilleur second livre que les programmeurs C ++ devraient lire, et il a réussi. Les éditions précédentes étaient destinées aux programmeurs venant de C, la troisième édition change cela et cible les programmeurs venant de langages comme Java. Il présente environ 50 règles empiriques faciles à retenir ainsi que leur justification dans un style très accessible (et agréable). Pour C ++ 11 et C ++ 14, les exemples et quelques problèmes sont obsolètes et le C ++ moderne efficace doit être préféré. [La revue]

  • Effective Modern C ++ (Scott Meyers) Il s'agit essentiellement de la nouvelle version de Effective C ++ , destinée aux programmeurs C ++ effectuant la transition de C ++ 03 à C ++ 11 et C ++ 14.

  • STL efficace (Scott Meyers) Cela vise à faire de même pour la partie de la bibliothèque standard provenant de la STL ce qu'Efficace C ++ a fait pour le langage dans son ensemble: il présente des règles générales ainsi que leur justification. [La revue]

Intermédiaire

  • C ++ plus efficace (Scott Meyers) Encore plus de règles d'or que le C ++ efficace . Pas aussi important que ceux du premier livre, mais bon à savoir.

  • Exceptionnel C ++ (Herb Sutter) Présenté comme un ensemble de puzzles, celui-ci a l'une des meilleures discussions approfondies sur la bonne gestion des ressources et la sécurité des exceptions en C ++ grâce à l'acquisition de ressources est l'initialisation (RAII) en plus de la couverture approfondie d'une variété d'autres sujets, y compris l'idiome pimpl, la recherche de nom, une bonne conception de classe et le modèle de mémoire C ++. [La revue]

  • Plus exceptionnel C ++ (Herb Sutter) Couvre des sujets de sécurité d'exception supplémentaires non couverts dans Exceptional C ++ , en plus de la discussion sur la programmation orientée objet efficace en C ++ et l'utilisation correcte de la STL. [La revue]

  • Style C ++ exceptionnel (Herb Sutter) Discute de la programmation générique, de l'optimisation et de la gestion des ressources; ce livre a également une excellente exposition de la façon d'écrire du code modulaire en C ++ en utilisant des fonctions non membres et le principe de responsabilité unique. [La revue]

  • Normes de codage C ++ (Herb Sutter et Andrei Alexandrescu) «Normes de codage» ne signifie pas ici «combien d'espaces dois-je mettre en retrait mon code?» Ce livre contient 101 meilleures pratiques, idiomes et pièges courants qui peuvent vous aider à écrire du code C ++ correct, compréhensible et efficace. [La revue]

  • Modèles C ++: le guide complet (David Vandevoorde et Nicolai M. Josuttis) Ceci est le livre sur les modèles tels qu'ils existaient avant C ++ 11. Il couvre tout, des bases à certains des métaprogrammations de modèles les plus avancées et explique chaque détail du fonctionnement des modèles (à la fois conceptuellement et comment ils sont mis en œuvre) et discute de nombreux pièges courants. Possède d'excellents résumés de la règle de définition unique (ODR) et de la résolution de surcharge dans les annexes. Une deuxième édition couvrant C ++ 11, C ++ 14 et C ++ 17 a déjà été publiée. [La revue]

  • C ++ 17 - Le guide complet (Nicolai M. Josuttis) Ce livre décrit toutes les nouvelles fonctionnalités introduites dans la norme C ++ 17 couvrant tout, des plus simples comme 'Inline Variables', 'constexpr if' jusqu'à 'Polymorphic Ressources de mémoire »et« Nouveau et supprimer avec des données suralignées ».


Avancée

  • Modern C ++ Design (Andrei Alexandrescu) Un livre révolutionnaire sur les techniques avancées de programmation générique. Présente une conception basée sur des politiques, des listes de types et des idiomes de programmation génériques fondamentaux, puis explique combien de modèles de conception utiles (y compris les petits allocateurs d'objets, les foncteurs, les usines, les visiteurs et les méthodes multiples) peuvent être implémentés de manière efficace, modulaire et propre à l'aide d'une programmation générique . [La revue]

  • Métaprogrammation de modèles C ++ (David Abrahams et Aleksey Gurtovoy)

  • C ++ Concurrency In Action (Anthony Williams) Un livre couvrant la prise en charge de la concurrence C ++ 11, y compris la bibliothèque de threads, la bibliothèque atomique, le modèle de mémoire C ++, les verrous et les mutex, ainsi que les problèmes de conception et de débogage d'applications multithread. Une deuxième édition couvrant C ++ 14 et C ++ 17 a déjà été publiée.

  • Métaprogrammation C ++ avancée (Davide Di Gennaro) Un manuel pré-C ++ 11 de techniques TMP, plus axé sur la pratique que sur la théorie. Il y a une tonne d'extraits dans ce livre, dont certains sont rendus obsolètes par des traits de type, mais les techniques sont néanmoins utiles à connaître. Si vous pouvez accepter le formatage / l'édition original, il est plus facile à lire qu'Alexandrescu et, sans doute, plus gratifiant. Pour les développeurs plus expérimentés, il y a de fortes chances que vous puissiez ramasser quelque chose sur un coin sombre de C ++ (une bizarrerie) qui ne se produit généralement qu'à travers une vaste expérience.

  • Programmation fonctionnelle en C ++ (Ivan Čukić) Le livre présente au lecteur le paradigme fonctionnel du C ++ moderne. Il couvre les aspects théoriques et codés avec une variété d'exemples et de diagrammes. L'auteur a de l'expérience dans l'enseignement et l'utilise pour guider en douceur le lecteur à travers différents aspects de la programmation fonctionnelle.


Style de référence - tous les niveaux

  • Le langage de programmation C ++ (Bjarne Stroustrup) ( mis à jour pour C ++ 11 ) Introduction classique au C ++ par son créateur. Écrit pour être parallèle au K&R classique, celui-ci se lit en effet très bien et couvre à peu près tout, du langage de base à la bibliothèque standard, en passant par les paradigmes de programmation et la philosophie du langage. [Review] Remarque: Toutes les versions de la norme C ++ sont suivies dans cette question: Où puis-je trouver la norme C ++ actuelle .

  • C ++ Standard Library Tutorial et référence (Nicolai Josuttis) ( mis à jour pour C ++ 11 ) L' introduction etréférence pour la bibliothèque standard C ++. La deuxième édition (publiée le 9 avril 2012) couvre C ++ 11. [La revue]

  • Les flux et les environnements locaux C ++ IO (Angelika Langer et Klaus Kreft) Il y a très peu de choses à dire sur ce livre, sauf que, si vous voulez en savoir plus sur les flux et les paramètres régionaux, c'est le seul endroit pour trouver des réponses définitives. [La revue]

C ++ 11/14/17 /… Références:

  • Les C ++ 11 / quatorze / 17 standard (INCITS / ISO / IEC 14882: 2011/2014/2017) Ceci, bien sûr, est l'arbitre final de tout ce qui est ou non en C ++. Sachez cependant qu'il est destiné uniquement à servir de référence aux utilisateurs expérimentés désireux de consacrer beaucoup de temps et d'efforts à sa compréhension. La norme C ++ 17 est publiée sous forme électronique pour 198 francs suisses.

  • La norme C ++ 17 est disponible, mais apparemment pas sous une forme économique - directement à partir de l'ISO, elle coûte 198 francs suisses (environ 200 $ US). Pour la plupart des gens, le projet final avant la normalisation est plus que suffisant (et gratuit). Beaucoup préféreront un brouillon encore plus récent , documentant les nouvelles fonctionnalités susceptibles d'être incluses dans C ++ 20.

  • Présentation du nouveau C ++ (C ++ 11/14) (PDF uniquement) (Scott Meyers) ( mis à jour pour C ++ 14 ) Ce sont les supports de présentation (diapositives et quelques notes de cours) d'une formation de trois jours offerte par Scott Meyers, qui est un auteur très respecté sur C ++. Même si la liste des articles est courte, la qualité est élevée.

  • Les directives de base C ++ (C ++ 11/14/17 /…) (éditées par Bjarne Stroustrup et Herb Sutter) est un document en ligne évolutif composé d'un ensemble de directives pour bien utiliser le C ++ moderne. Les directives se concentrent sur des problèmes de niveau relativement plus élevé, tels que les interfaces, la gestion des ressources, la gestion de la mémoire et la concurrence affectant l'architecture des applications et la conception de la bibliothèque. Le projet a été annoncé à CppCon'15 par Bjarne Stroustrup et d'autres et accueille favorablement les contributions de la communauté. La plupart des lignes directrices sont complétées par une justification et des exemples ainsi que des discussions sur le soutien possible des outils. De nombreuses règles sont conçues spécifiquement pour être vérifiables automatiquement par des outils d'analyse statique.

  • La C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup et autres) est un effort de la Standard C ++ Foundation pour unifier les FAQ C ++ précédemment maintenues individuellement par Marshall Cline et Bjarne Stroustrup et incorporant également de nouvelles contributions. Les articles abordent principalement des problèmes à un niveau intermédiaire et sont souvent écrits avec un ton humoristique. Tous les éléments ne sont pas encore à jour avec la dernière édition de la norme C ++.

  • cppreference.com (C ++ 03/11/14/17 /…) (initié par Nate Kohl) est un wiki qui résume les fonctionnalités de base du langage de base et possède une documentation complète de la bibliothèque standard C ++. La documentation est très précise mais plus facile à lire que le document standard officiel et offre une meilleure navigation en raison de sa nature wiki. Le projet documente toutes les versions de la norme C ++ et le site permet de filtrer l'affichage pour une version spécifique. Le projet a été présenté par Nate Kohl à CppCon'14 .


Classiques / Plus âgés

Remarque: Certaines informations contenues dans ces livres peuvent ne pas être à jour ou ne plus être considérées comme les meilleures pratiques.

  • La conception et l'évolution du C ++ (Bjarne Stroustrup) Si vous voulez savoir pourquoi le langage est ce qu'il est, c'est dans ce livre que vous trouverez les réponses. Cela couvre tout avant la standardisation de C ++.

  • Ruminations sur C ++ - (Andrew Koenig et Barbara Moo) [Critique]

  • Styles et idiomes de programmation C ++ avancés (James Coplien) Prédécesseur du mouvement de motif, il décrit de nombreux «idiomes» spécifiques au C ++. C'est certainement un très bon livre et pourrait encore valoir la peine d'être lu si vous pouvez gagner du temps, mais assez ancien et pas à jour avec le C ++ actuel.

  • Conception de logiciels C ++ à grande échelle (John Lakos) Lakos explique les techniques de gestion de très gros projets logiciels C ++. Certainement, une bonne lecture, si seulement elle était à jour. Il a été écrit bien avant C ++ 98 et manque de nombreuses fonctionnalités (par exemple les espaces de noms) importantes pour les projets à grande échelle. Si vous devez travailler dans un grand projet logiciel C ++, vous voudrez peut-être le lire, bien que vous ayez besoin de prendre plus d'un grain de sel avec lui. Le premier volume d'une nouvelle édition sort en 2019 .

  • À l'intérieur du modèle d'objet C ++ (Stanley Lippman) Si vous voulez savoir comment les fonctions de membre virtuel sont généralement implémentées et comment les objets de base sont généralement disposés en mémoire dans un scénario à héritage multiple, et comment tout cela affecte les performances, c'est là que vous allez trouver des discussions approfondies sur ces sujets.

  • Le manuel de référence annoté C ++ (Bjarne Stroustrup, Margaret A. Ellis) Ce livre est assez obsolète dans la mesure où il explore la version 1989 C ++ 2.0 - Les modèles, les exceptions, les espaces de noms et les nouvelles conversions n'ont pas encore été introduits. En disant que cependant, ce livre passe en revue l'intégralité de la norme C ++ de l'époque, expliquant la raison d'être, les implémentations possibles et les caractéristiques du langage. Ce n'est pas un livre pour apprendre les principes et les modèles de programmation sur C ++, mais pour comprendre tous les aspects du langage C ++.

  • Penser en C ++ (Bruce Eckel, 2e édition, 2000). Deux volumes; est unensemble gratuit de livres de niveau d'introduction destyle tutoriel. Téléchargements: vol 1 , vol 2 . Malheureusement, ils sont entachés d'un certain nombre d'erreurs triviales (par exemple en maintenant que les temporaires sont automatiquement const), sans liste d'errata officielle. Un 3 partiel e partie de la liste errata est disponible à ( http://www.computersciencelab.com/Eckel.htm ), mais il est apparemment pas maintenu.

  • Scientific and Engineering C ++: An Introduction to Advanced Techniques and Examples (John Barton et Lee Nackman) Il s'agit d'un livre complet et très détaillé qui a essayé d'expliquer et d'utiliser toutes les fonctionnalités disponibles en C ++, dans le contexte des méthodes numériques. Il a introduit à l'époque plusieurs nouvelles techniques, comme le modèle de modèle curieusement récurrent (CRTP, également appelé astuce Barton-Nackman). Il a lancé plusieurs techniques telles que l'analyse dimensionnelle et la différenciation automatique. Il est venu avec beaucoup de code compilable et utile, allant d'un analyseur d'expression à un wrapper Lapack. Le code est toujours disponible ici: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Malheureusement, les livres sont devenus quelque peu dépassés dans le style et les fonctionnalités C ++, cependant, c'était un tour de force incroyable à l'époque (1994, pré-STL). Les chapitres sur l'héritage dynamique sont un peu compliqués à comprendre et peu utiles. Une version mise à jour de ce livre classique qui comprend la sémantique des mouvements et les leçons apprises de la STL serait très agréable.

George Stocker
la source
402
@G Rassovsky: Tous les livres qui promettent d'enseigner X dans Y heures. Par exemple, apprenez le C ++ en 24 heures. Je crois que tous ces livres sont mieux évités.
akhil_mittal
115
Je déteste marcher sur les chaussures de qui que ce soit, mais je ne recommande pas "Thinking in C ++" de Bruce Eckel même si je respecte l'auteur pour avoir publié ses documents en ligne gratuitement. La perspective du livre suggère une utilisation relativement pauvre ou inefficace de la programmation C ++ et "orientée objet", semblable à une mauvaise application des modèles de conception du GoF. Je l'ai trouvé un livre d'introduction intéressant à la programmation en général, mais au fur et à mesure que quelqu'un se familiarise avec la programmation et (en particulier) l'informatique dans son ensemble, je trouve que les livres qui pensent uniquement en termes de POO "classiques" nuisent à l'éducation.
30
@ G.Rassovsky sur le site accu.org, il y a une section de critiques de livres avec des notes. Vous pouvez rechercher ceux C ++. Beaucoup d'entre eux sont classés «non recommandés».
Zaphod Beeblebrox
83
Le C ++ accéléré date de 2000. Dois-je m'inquiéter qu'il soit obsolète?
AutonomousApps
60
Je pense qu'il serait bon de mettre les dates publiées pour l'édition (avec le numéro d'édition le cas échéant).
Aaron Hall