Question Le guide et la liste définitifs du livre C ++


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

Contrairement à beaucoup d'autres langages de programmation, qui sont souvent repris sur le pouce à partir de tutoriels 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 faire ça. En fait, il est si grand et complexe que il y a beaucoup de très mauvais livres en C ++ là-bas. Et nous ne parlons pas de mauvais style, mais des choses comme le sport erreurs factuelles manifestement évidentes et promouvoir des styles de programmation abystiquement mauvais.

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

* Note: Les FAQ et autres ressources peuvent être trouvées dans le Informations sur les tags C ++ et sous .


4253


origine


Réponses:


Débutant

Introductif, aucune expérience antérieure en programmation

  • C ++ Primer * (Stanley Lippman, Josée Lajoie et Barbara E. Moo) (mis à jour pour C ++ 11) En 1k pages, c'est une introduction très complète 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 C ++ (Bjarne Stroustrup, 2e édition - 25 mai 2014) (mis à jour pour C ++ 11 / C ++ 14Une introduction à la programmation en C ++ par le créateur du langage. Une bonne lecture, qui ne suppose aucune expérience de programmation préalable, mais qui n'est pas réservée aux débutants.

* Ne pas confondre avec C ++ Primer Plus (Stephen Prata), avec un bien moins favorable la revue.

Introduction, avec une expérience de programmation antérieure

  • Une visite de C ++ (Bjarne Stroustrup) (2ème édition pour C ++ 17) Le "tour" est un aperçu rapide (environ 180 pages et 14 chapitres) du tutoriel de tous les standards C ++ (langage et bibliothèque standard, et en utilisant 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) Ceci 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 cherche pas à être une introduction à la programmation, mais une introduction à C ++ pour les personnes qui ont déjà programmé dans une autre langue. Il a une courbe d'apprentissage plus raide, mais, pour ceux qui peuvent faire face à cela, c'est une introduction très compacte à la langue. (Historiquement, il a innové en étant le premier livre de débutant à utiliser une approche moderne de l'enseignement de la langue.) Malgré cela, le C ++ il enseigne est purement C ++ 98. [La revue]

Les meilleures pratiques

  • C ++ efficace (Scott Meyers, 3rd Edition - 22 Mai 2005) Ceci a été écrit dans le but d'être le meilleur second livre que les programmeurs C ++ devraient lire, et cela 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 langues comme Java. Il présente ~ 50 règles de base 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 Efficace Moderne C ++ devrait être préféré. [La revue]

  • C ++ moderne efficace (Scott Meyers) C'est essentiellement la nouvelle version de C ++ efficace, destiné aux programmeurs C ++ effectuant la transition de C ++ 03 vers C ++ 11 et C ++ 14.

  • STL efficace (Scott Meyers) Cela a pour but de faire de même pour la partie de la bibliothèque standard qui vient du STL C ++ efficace fait à la langue dans son ensemble: Il présente des règles empiriques avec leur justification. [La revue]

Intermédiaire

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

  • C ++ exceptionnel (Herb Sutter) Présenté comme un ensemble d'énigmes, ceci a l'une des discussions les meilleures et les plus approfondies sur la gestion des ressources et la sécurité des exceptions en C ++ grâce à l'acquisition de ressources (RAII) en plus de la couverture détaillée d'autres des rubriques incluant l'idiome de pimpl, la recherche de nom, la bonne conception de classe et le modèle de mémoire C ++. [La revue]

  • C ++ plus exceptionnel (Herb Sutter) Couvre d'autres sujets de sécurité d'exception non couverts par C ++ exceptionnel, en plus de la discussion de la programmation orientée objet efficace en C ++ et de 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 présente également un excellent exposé sur la façon d'écrire du code modulaire en C ++ en utilisant des fonctions non-membres et le principe de la responsabilité unique. [La revue]

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

  • Modèles C ++: le guide complet (David Vandevoorde et Nicolai M. Josuttis) Ceci est la livre sur les modèles tels qu'ils existaient avant C ++ 11. Il couvre tout, depuis les bases mêmes jusqu'à la métaprogrammation de modèles la plus avancée, et explique chaque détail du fonctionnement des modèles (à la fois conceptuellement et de la façon dont ils sont mis en œuvre) et discute de nombreux pièges courants. A 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é. [La revue]


Avancée

  • Design C ++ moderne (Andrei Alexandrescu) Un livre révolutionnaire sur les techniques avancées de programmation générique. Présente une conception basée sur des règles, des listes de types et des idiomes génériques de programmation génériques, puis explique comment de nombreux modèles de conception (y compris les allocateurs d'objets, les foncteurs, les usines, les visiteurs et les multi-méthodes) peuvent être implémentés efficacement. . [La revue]

  • Modèle C ++ Métaprogrammation (David Abrahams et Aleksey Gurtovoy)

  • Concurrence C ++ en action (Anthony Williams) Un livre couvrant la prise en charge de la simultanéité C ++ 11 comprenant 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 des applications multithread.

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


Style de référence - Tous les niveaux

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

  • La norme C ++ (INCITS / ISO / IEC 14882-2011) Ceci, bien sûr, est l'arbitre final de tout ce qui est ou n'est pas C ++. Sachez toutefois qu'il est uniquement destiné à servir de référence expérimenté utilisateurs désireux de consacrer beaucoup de temps et d'efforts à sa compréhension. Comme d'habitude, la première version était assez cher (300 $ + US), mais il a maintenant été publié sous forme électronique pour 60US $.

  • La norme C ++ 14 est disponible, mais apparemment pas dans une forme économique - directement à partir de l'ISO il en 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 encore plus récent projet, documentant les nouvelles fonctionnalités susceptibles d'être incluses dans C ++ 17.

  • Vue d'ensemble du nouveau C ++ (C ++ 11/14) (PDF uniquement) (Scott Meyers) (mis à jour pour C ++ 1y / C ++ 14Voici le matériel de présentation (diapositives et quelques notes de cours) d'un cours de formation de trois jours offert par Scott Meyers, qui est un auteur très respecté sur C ++. Même si la liste des éléments est courte, la qualité est élevée.

  • le Principes de base de C ++ (C ++ 11/14/17 / ...) (édité 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 sont axées sur des problèmes de niveau relativement élevé, tels que les interfaces, la gestion des ressources, la gestion de la mémoire et la simultanéité affectant l'architecture des applications et la conception des bibliothèques. Le projet était annoncé à CppCon'15 par Bjarne Stroustrup et d'autres et accueille 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 un éventuel outil de soutien. De nombreuses règles sont conçues spécifiquement pour être automatiquement vérifiables par des outils d'analyse statique.

  • le Super-FAQ C ++ (Marshall Cline, Bjarne Stroustrup et autres) est un effort de la Fondation Standard C ++ pour unifier la FAQ C ++ précédemment maintenue individuellement par Marshall Cline et Bjarne Stroustrup et incorporant également de nouvelles contributions. Les articles traitent principalement des problèmes à un niveau intermédiaire et sont souvent écrits avec un ton humoristique. Tous les articles ne sont peut-être pas encore complètement à 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 est 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 était présenté par Nate Kohl à CppCon'14.


Classics / Older

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

  • La conception et l'évolution de C ++ (Bjarne Stroustrup) Si vous voulez savoir Pourquoi la langue est comme elle est, ce livre est où vous trouverez des réponses. Cela couvre tout avant la normalisation de C ++.

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

  • Styles et idiomes de programmation C ++ avancés (James Coplien) Un prédécesseur du mouvement pattern, il décrit de nombreux "idiomes" spécifiques au C ++. C'est certainement un très bon livre et peut-être encore mérite d'être lu si vous pouvez épargner du temps, mais assez vieux et pas à jour avec le C ++ actuel.

  • Conception de logiciels C ++ à grande échelle (John Lakos) Lakos explique les techniques pour gérer de très gros projets logiciels C ++. Certainement, une bonne lecture, si seulement il é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 avez besoin de travailler sur un gros projet C ++, vous pouvez le lire, même si vous devez en prendre plus d'un grain de sel. Le premier volume d'une nouvelle édition est prévu en 2018.

  • Dans le modèle objet C ++ (Stanley Lippman) Si vous voulez savoir comment les fonctions membres virtuels sont couramment implémentées et comment les objets de base sont généralement stockés en mémoire dans un scénario multi-héritage, et comment tout cela affecte les performances, c'est ici que vous trouverez des discussions approfondies les sujets.

  • Le manuel de référence C ++ annoté (Bjarne Stroustrup, Margaret A. Ellis) Ce livre est assez désuet dans le fait qu'il explore la version C ++ 2.0 de 1989 - Les modèles, les exceptions, les espaces de noms et les nouveaux casts n'ont pas encore été introduits. Dire que cependant, ce livre passe par l'ensemble de la norme C ++ de l'époque expliquant la logique, 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 chaque aspect du langage C ++.

  • Penser en C ++ (Bruce Eckel) Deux volumes; est un style de tutoriel gratuit ensemble de livres de niveau intro. Téléchargements: vol 1, vol 2. Malheureusement, ils sont gâchés par un certain nombre d'erreurs triviales (par exemple, le maintien des temporaires est automatiquement const), sans liste d'errata officielle. Un partiel 3rd La liste des errata est disponible à (http://www.computersciencelab.com/Eckel.htm), mais il n'est apparemment pas maintenu.

  • Scientifique et ingénieur C ++: une introduction aux techniques et exemples avancés (John Barton et Lee Nackman) C'est 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, telles que Curlyly Recurring Template Pattern (CRTP, également appelé tour Barton-Nackman). Il a été le pionnier de plusieurs techniques telles que l'analyse dimensionnelle et la différenciation automatique. Il est livré 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 obsolètes 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 pas très utiles. Une version mise à jour de ce livre classique qui inclut la sémantique de mouvement et les leçons apprises de la STL serait très agréable.


4015