Le C ++ efficace est-il toujours efficace?


139

D'après ce que j'ai vu dans cet article, j'ai décidé de commencer à lire le livre Effective C ++ .

Mais maintenant qu'il y a beaucoup de nouvelles fonctionnalités à cause de C ++ 11 et que quelques-unes des bonnes pratiques ont changé, je ne sais pas si c'est réellement une bonne idée. L'avènement du C ++ 11 a-t-il rendu obsolète l'un des conseils contenus dans Effective C ++? Si oui, quels sujets dois-je éviter?


4
L'auteur a fait quelques commentaires dans un article scottmeyers.blogspot.co.uk/2013/01/… et d'autres sur le site, en gros oui, mais il y a plus à considérer.
jcoder

2
Jetez un œil à la table des matières: pearson.ch/1471/9780321334879/… . De nombreux éléments sont toujours valides, certains peuvent être améliorés avec des références de valeur r et d'autres nouveautés, mais dans l'ensemble, cela devrait être toujours efficace.
Zeta

Cette question ne convient pas à SO. (1) Le contenu interrogé n'est pas dans la question, c'est dans une ressource hors site (et même pas liée). (2) Soit adresser chaque recommandation dans le livre est une réponse distincte, auquel cas il s'agit d'une question de liste, nécessitant trop de réponses, soit une seule réponse devrait discuter de tout le livre, auquel cas cette question est trop large. Cela dit, poser la même question sur une seule recommandation serait formidable.
Ben Voigt

2
(1) Je fais référence à un livre mentionné dans l'une des questions les plus courantes de SO. (2) C'est une plainte correcte, mais vous pouvez être large avec presque toutes les questions. ou vous pouvez être aussi étroit que vous le souhaitez. Je pense que les réponses étaient plutôt bonnes et bien plus étroites que la plupart des questions de SO, donc je ne pense pas qu'une liste détaillée soit nécessaire. HORS SUJET: devinez qui a une question qui commence par "Quelqu'un peut-il battre la performance de mon entier en code std :: string, lié ci-dessous?"
German Capuano

Réponses:


93

Voici ce que Scott Meyers lui-même avait à dire sur son propre blog

Ce qui peut vous amener à vous demander si les informations et les conseils de cette édition pré-C ++ 0x de Effective C ++ restent pertinents. Je suis heureux d'annoncer que c'est le cas. Étonnamment, en fait. Après avoir passé près de deux ans dans les détails de C ++ 0x, je m'attendais à gémir un peu en passant en revue la table des matières de ce livre avec C ++ 0x à l'esprit. Certains éléments seraient certainement inappropriés. Mais le conseil que j'ai trouvé s'est avéré valable. Les développeurs C ++ 0x devraient-ils préférer les consts, les enums et les inlines #defines(Point 2)? Ils devraient. Devraient-ils empêcher les exceptions de quitter les destructeurs (point 8)? Certainement. Devraient-ils utiliser des objets pour gérer les ressources? Déclarer les membres de données privés? Envisagez-vous des alternatives aux fonctions virtuelles? Factoriser le code indépendant des paramètres des modèles? (Points 13, 22, 35 et 44.) Oui, oui, oui, oui! Mon objectif a toujours été que la table des matières d'Effective C ++ résume les conseils du livre, et ce résumé reste tout aussi applicable au développement C ++ 0x qu'au développement C ++ «traditionnel». C ++ 0x est un langage plus volumineux, et à certains égards différent, mais les techniques de base pour utiliser efficacement «l'ancien» C ++ sont également essentielles pour une utilisation efficace de C ++ 0x.

Cela ne signifie pas que ce C ++ efficace correspond parfaitement à C ++ 0x. Le livre ne traite pas des nouvelles fonctionnalités de C ++ 0x, donc il manque des éléments sur l'utilisation efficace de ces fonctionnalités. Un C ++ efficace 0xified C ++ aurait certainement des éléments consacrés aux opérations de déplacement, à l'initialisation uniforme et aux expressions lambda, et il contiendrait probablement un chapitre entier sur l'utilisation efficace de l'API de concurrence. Un tel livre contiendrait également différents exemples, par exemple, ceux utilisant des variables automatiques, des boucles for basées sur des plages, des initialiseurs par défaut en classe, ainsi que des modèles variadiques occasionnels. Dans la mesure où ce livre ne prend pas en charge C ++ 0x, les erreurs sont celles de l'omission et non de la commission.

UPDATE : le nouveau titre Effective Modern C ++ est en vente depuis novembre 2014 chez O'Reilly et Amazon (et bien d'autres pour lesquels vous pouvez rechercher).


45

Oui, ça vaut vraiment la peine d'être lu. Il y a un nouveau livre sur lequel Scott travaille: Effective C ++ 11 , qui se concentre uniquement sur le code C ++ 11. Le C ++ efficace est toujours très pertinent et n'est pas remplacé par le nouveau livre. Achetez-le, lisez-le, profitez-en :)


1
Je vois les livres se construire les uns sur les autres, donc le C ++ efficace est le fondement essentiel. Si vous ne lisez que l'un des deux, il doit s'agir de C ++ efficace. Le C ++ moderne efficace est beaucoup plus ésotérique (et pour être honnête, la majorité du C ++ est loin d'être «moderne» de toute façon).
Andy Krouwel

21

Premièrement, le livre est toujours valable pour C ++ 03.

Deuxièmement, Meyers écrit ou a écrit, selon le moment où vous lisez cette phrase, Effective C ++ 11.

Troisièmement, parlant en général, les points de ce livre seront toujours valables. C ++ privilégie toujours la vitesse par rapport à la sécurité, et de nombreux problèmes dans Effective C ++ tournent autour de cela.

Le seul type de point auquel je m'attendrais être invalide est celui qui dit "Ne faites pas ceci, faites ceci à la place." "Ne faites pas ça" sera toujours valide. Mais C ++ aura résolu certains problèmes. En particulier, toute recommandation d'utilisation de boost est probablement obsolète, car C ++ 11 a inclus de nombreuses fonctionnalités pour lesquelles Meyers renvoie spécifiquement le lecteur à Boost.


1
Et bien sûr tr1, puisque je crois que chaque élément tr1qu'il a mentionné en a fait la norme C ++ 11.
Kyle Strand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.