web-dev-qa-db-fra.com

Le guide et la liste de livres Definitive C ++

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, souvent empruntés à des tutoriels disponibles sur Internet, peu sont capables de maîtriser rapidement le C++ sans avoir à étudier un livre C++ bien écrit. C'est beaucoup trop grand et complexe pour cela. En fait, il est tellement gros et complexe que il y a beaucoup de très mauvais livres C++ out Là. Et nous ne parlons pas de mauvais style, mais de choses comme sporting des erreurs factuelles flagrantes et évidentes et faisant la promotion de styles de programmation abominables .

Veuillez modifier la réponse acceptée pour fournir des ouvrages de qualité et un niveau de compétence approximatif - de préférence après discuter de votre ajout dans la salle de discussion C++. (Les habitués peuvent annuler sans pitié votre travail s’ils ne sont pas d’accord avec une recommandation.) Ajoutez un court texte de présentation/description de chaque livre que vous avez lu/dont vous avez personnellement tiré profit. 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 ayant des critiques de l'Association des utilisateurs de C et C++ (ACCU) ont des liens vers les critiques.

* Remarque: les FAQ et autres ressources se trouvent dans les informations sur les balises C++ et sous c ++ - faq .

4248
grepsedawk

Débutant

Introduction, pas d'expérience en programmation

  • C++ Primer * (Stanley Lippman, Josée Lajoie et Barbara E. Moo) ( mis à jour pour C++ 11 ) Avec 1 k pages, il s’agit d’une introduction très complète au C++ qui couvre à peu près tout le langage, dans un format très accessible et très détaillé. La cinquième édition (publiée le 16 août 2012) couvre C++ 11. [Review]

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

* Ne pas confondre avec C++ Primer Plus (Stephen Prata), avec une valeur nettement moins favorable revue .

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

  • Une visite guidée de C++ (Bjarne Stroustrup) (2ème édition pour C++ 17 = ) Le "tour" est un aperçu rapide (environ 180 pages et 14 chapitres) de l’ensemble des standards C++ (langage et bibliothèque standard, et 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 constituant les chapitres 2 à 5 du langage de programmation C++, 4e édition.

  • C++ accéléré (Andrew Koenig et Barbara Moo, 1re édition - 24 août 2000) Cela couvre essentiellement le même motif que le C++ Primer , mais le fait sur un quart de son espace. Cela tient en grande partie au fait qu’il ne s’agit pas d’une introduction à la programmation , mais d’une introduction à la C++ pour les personnes qui ont déjà utilisé programmé dans une autre langue. La courbe d'apprentissage est 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 de débutant à utiliser une approche moderne de l’enseignement de la langue.) Malgré cela, le C++ qu’il enseigne est purement C++ 98. [Review]

Les meilleures pratiques

  • Effective C++ (Scott Meyers, 3ème édition - 22 mai 2005) Ceci a été écrit dans le but d'être le meilleur second livre que les programmeurs C++ devraient lire, et ça a réussi. Les éditions précédentes visaient les programmeurs venant de C, la troisième édition change cela et cible les programmeurs venant de langages comme Java. Il présente une cinquantaine de 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 Effective Modern C++ doit être préféré. [Review]

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

  • Effective STL (Scott Meyers) Ceci a pour but de faire de même avec la partie de la bibliothèque standard provenant du STL what L’efficacité de C++ s’applique à la langue dans son ensemble: elle présente des règles empiriques ainsi que leur justification. [Review]

Intermédiaire

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

  • C++ exceptionnel (Herb Sutter) Présenté comme un ensemble d'énigmes, il propose l'une des meilleures discussions approfondies sur la gestion correcte des ressources et la sécurité des exceptions dans C++ via l’acquisition des ressources est l’initialisation (RAII) en plus d’une couverture détaillée de divers autres sujets, notamment l’idiome pimpl, la recherche de nom, la bonne conception de classe et le modèle de mémoire C++. [Review]

  • Plus exceptionnel C++ (Herb Sutter) Couvre d'autres sujets relatifs à la sécurité des exceptions non traités dans . Exceptionnel C++ , dans ajout à la discussion sur la programmation orientée objet efficace en C++ et utilisation correcte de la STL. [Review]

  • 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 manière d'écrire du code modulaire en C++ en utilisant des fonctions non membres et le principe de responsabilité unique. [Review]

  • 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? book contient 101 meilleures pratiques, idiomes et pièges courants qui peuvent vous aider à écrire du code C++ correct, compréhensible et efficace. [Review]

  • Modèles C++: Le guide complet (David Vandevoorde et Nicolai M. Josuttis) Ceci est le livre à propos des modèles tels qu'ils existaient avant C++ 11. Il couvre tout, des bases aux métaprogrammations de modèles les plus avancées, explique en détail le fonctionnement des modèles (à la fois sur le plan conceptuel et sur la manière dont ils sont mis en œuvre) et traite de nombreux pièges courants. A d'excellents résumés de la règle de définition unique (ODR) et la résolution de surcharge dans les annexes. Un deuxième édition couvrant les langages C++ 11, C++ 14 et C++ 17 a déjà été publié. [Review]

  • C++ 17 - Le guide complet (Nicolai M. Josuttis) Ce livre décrit toutes les nouvelles fonctionnalités introduites dans la norme C++ 17 et couvre tout, de la des exemples simples tels que "variables en ligne", "constexpr if" jusqu'à "ressources de mémoire polymorphes" et "nouveau et supprimer avec des données suralignées".


Avancée

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

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

  • C++ en accès simultané (Anthony Williams) Livre traitant de la prise en charge de la simultanéité C++ 11, comprenant la bibliothèque de threads, la bibliothèque Atomics, le modèle de mémoire C++, des verrous et des mutex, ainsi que des problèmes de conception et de débogage d’applications multithreads.

  • Métaprogrammation C++ avancée (Davide Di Gennaro) Manuel de techniques TMP pré-C++ 11, davantage axé sur la pratique que sur la théorie. Ce livre contient une tonne d'extraits, dont certains sont rendus obsolètes par les caractères typographiques, mais les techniques sont néanmoins utiles à connaître. Si vous pouvez supporter le formatage/é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 pour que vous découvriez quelque chose au sujet d'un coin sombre du C++ (une bizarrerie) qui ne provient généralement que d'une vaste expérience.


Style de référence - Tous les niveaux

  • Le langage de programmation C++ (Bjarne Stroustrup) ( mis à jour pour C++ 11 ) L'introduction classique au C++ par son créateur. Écrit pour faire écho au classique K & R, il se lit comme tel et couvre à peu près tout, du langage principal à 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 .

  • Tutoriel et référence de la bibliothèque standard C++ (Nicolai Josuttis) ( mis à jour pour C++ 11 ) Introduction et référence pour la bibliothèque standard C++. La deuxième édition (publiée le 9 avril 2012) couvre C++ 11. [Review]

  • Le C++ IO Streams and Locales (Angelika Langer et Klaus Kreft) Il y a très peu à dire sur ce livre sauf que, si vous voulez tout savoir sur les flux et les paramètres régionaux, alors c’est le seul endroit où trouver des réponses définitives. [Review]

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

  • Le standard C++ 11 / 14 / 17 (INCITS/ISO/IEC 14882: 2011/2014/2017) Ceci, bien sûr, est l'arbitre final de tout ce qui est ou non C++. Sachez toutefois qu’il s’agit uniquement d’une référence pour les utilisateurs expérimentés désireux de consacrer un temps et des efforts considérables à 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 auprès de l'ISO elle coûte 198 francs suisses (environ 200 $ US). Pour la plupart des gens, le version finale avant la normalisation est plus que suffisant (et gratuit). Beaucoup préféreront un même le plus récent des projets , 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 ) Voici le matériel de présentation (diapositives et notes de cours) d'un cours de formation de trois jours offert par Scott Meyers, auteur très respecté du C++. Même si la liste d'articles est courte, la qualité est élevée.

  • Le C++ Core Guidelines (C++ 11/14/17 /…) (édité par Bjarne Stroustrup et Herb Sutter) est un document en ligne en évolution composé d'un ensemble de directives pour bien utiliser le C++ moderne. Les instructions concernent principalement les problèmes de niveau relativement élevé, tels que les interfaces, la gestion des ressources, la gestion de la mémoire et les accès simultanés affectant l'architecture des applications et la conception des bibliothèques. Le projet était annoncé lors de la CppCon'15 par Bjarne Stroustrup et 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 par des discussions sur le soutien éventuel des outils. De nombreuses règles sont spécifiquement conçues pour pouvoir être vérifiées automatiquement par des outils d'analyse statiques.

  • La C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup et autres) est un effort de la Fondation C++ standard pour unifier les FAQ C++ précédemment gérées individuellement par Marshall Cline et Bjarne Stroustrup et incorporant également de nouvelles contributions. Les articles traitent principalement de problèmes de niveau intermédiaire et sont souvent écrits avec un ton humoristique. Tous les éléments ne sont peut-être pas encore totalement à 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 le noyau de base -language features 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 .


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 de C++ (Bjarne Stroustrup) Si vous voulez savoir pourquoi le langage est Dans l’état actuel des choses, c’est dans ce livre que vous trouverez les réponses. Cela couvre tout avant la normalisation de C++.

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

  • Styles de programmation avancés C++ et expressions idiomatiques (James Coplien) Prédécesseur du mouvement de motif, il décrit de nombreux “idiomes” spécifiques à C++. C’est certainement un très bon livre qui mérite peut-être une lecture, mais assez vieux et pas à jour avec le C++ actuel.

  • Conception de logiciels C++ à grande échelle (John Lakos) Lakos explique les techniques permettant de gérer de très grands 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 pouvez le lire, même si vous devez emporter plus qu'un grain de sel. Le premier volume d'une nouvelle édition est attendu en 2019 .

  • dans le modèle d'objet C++ (Stanley Lippman) Si vous souhaitez savoir comment les fonctions de membre virtuel sont généralement implémentées et comment les objets de base sont généralement placés en mémoire Dans un scénario multi-héritage, et comment tout cela affecte les performances, vous trouverez ici des discussions approfondies sur ces sujets.

  • Manuel de référence du C++ annoté (Bjarne Stroustrup, Margaret A. Ellis) Ce livre est assez désuet, car il explore la version de C++ 2.0 de 1989 - Les modèles, les exceptions, les espaces de noms et les nouveaux transts n'ont pas encore été introduits. Cela étant dit, ce livre décrit tout le standard C++ de l’époque en expliquant les raisons, les implémentations possibles et les fonctionnalités du langage. Ce n'est pas un livre pour apprendre les principes et les modèles de programmation en C++, mais pour comprendre tous les aspects du langage C++.

  • Pensée en C++ (Bruce Eckel, 2e édition, 2000). Deux volumes; est un style de tutoriel gratuit de livres de niveaux d’intro. Téléchargements: vol 1 , vol 2 . Malheureusement, ils sont gâchés par un certain nombre d’erreurs triviales (par exemple, en affirmant que les temporaires sont automatiquement const), sans liste d’errata officielle. Un partiel 3rd La liste des errata des partis est disponible sur ( http://www.computersciencelab.com/Eckel.htm ), mais elle n’a apparemment pas été conservée.

  • C++ scientifique et technique: introduction aux techniques avancées et à des exemples (John Barton et Lee Nackman) C’est un livre complet et très détaillé qui tente d’expliquer et 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 le modèle de modèle curieusement récurrent (CRTP, également appelé astuce de Barton-Nackman). Il a mis au point 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 syntaxique 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 la dynamique des héritages sont un peu compliqués à comprendre et peu utiles. Une version mise à jour de ce livre classique incluant la sémantique des mouvements et les leçons tirées de la STL serait très agréable.

4551