L’efficacité du C ++ est-elle toujours efficace?

De ce que j’ai vu dans cet article, j’ai décidé de commencer à lire le livre Effective C ++ .

Mais maintenant que C ++ 11 contient de nombreuses nouvelles fonctionnalités et que quelques bonnes pratiques ont changé, je ne suis pas sûr que ce soit ou non une bonne idée. L’avènement de C ++ 11 a-t-il rendu obsolète l’un des conseils contenus dans Effective C ++? Si oui, quels sujets devrais-je éviter?

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

Ce qui peut vous amener à vous demander si les informations et les conseils de cette édition antérieure à C ++ 0x de Effective C ++ restnt pertinents. Je suis heureux de signaler que c’est le cas. Etonnamment, en fait. Ayant passé près de deux ans ancrés dans les détails de C ++ 0x, je m’attendais à gémir un peu lorsque j’ai revu la table des matières de ce livre en pensant à C ++ 0x. Certains articles seraient certainement inappropriés. Mais les conseils que j’ai trouvés se sont révélés sains. Les développeurs C ++ 0x devraient-ils préférer les consts, les enums et les inline à #defines (Item 2)? Ils devraient. Devraient-ils empêcher les exceptions de laisser des destructeurs (élément 8)? Certainement. Devraient-ils utiliser des objects pour gérer les ressources? Déclarer les membres de données privés? Envisager des alternatives aux fonctions virtuelles? Facteur de code indépendant du paramètre à partir de modèles? (Articles 13, 22, 35 et 44.) Oui, oui, oui, oui! Mon objective a toujours été la table des matières d’Effective C ++ pour résumer les conseils du livre, et ce résumé rest tout aussi applicable au développement en C ++ 0x qu’au développement en C ++ «traditionnel». C ++ 0x est un langage plus grand, et à certains égards il est différent, mais les techniques de base pour utiliser efficacement les «anciens» C ++ sont 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 fonctionnalités nouvelles de C ++ 0x, de sorte qu’il manque des éléments sur l’utilisation efficace de ces fonctionnalités. Un C ++ 0xified Effective C ++ aurait certainement des éléments consacrés au déplacement des opérations, à l’initialisation uniforme et aux expressions lambda, et aurait 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 basées sur des plages, des initialiseurs par défaut en classe, ainsi que le modèle occasionnel variadic. Dans la mesure où ce livre ne supporte pas C ++ 0x, les erreurs sont celles d’omission et non de commission.

MISE À JOUR : le nouveau titre Effective Modern C ++ est en vente depuis novembre 2014 chez O’Reilly et Amazon (et bien d’autres que vous pouvez consulter sur Google).

Oui, certainement encore la peine de lire. Il y a un nouveau livre sur lequel travaille Scott: Effective C ++ 11 , qui se concentre uniquement sur le code C ++ 11. The Effective C ++ est toujours très pertinent et n’est pas remplacé par le nouveau livre. Achetez-le, lisez-le, profitez-en 🙂

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

Deux, Meyers écrit ou a écrit, en fonction du 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 ++ favorise toujours la vitesse plutôt que la sécurité, et de nombreux problèmes dans Effective C ++ tournent autour de cela.

Le seul genre de point que je m’attendrais à être invalide est celui qui dit “Ne fais pas ça, fais-le plutôt”. “Dont ‘do this” sera toujours valide. Mais C ++ aura résolu certains problèmes. En particulier, toutes les recommandations pour utiliser boost sont probablement obsolètes, car C ++ 11 a inclus de nombreuses fonctionnalités auxquelles Meyers renvoie spécifiquement le lecteur à Boost.