web-dev-qa-db-fra.com

Le C ++ effectif est-il toujours efficace?

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 grâce à C++ 11 et que quelques bonnes pratiques ont changé, je ne suis pas sûr que ce soit réellement une bonne idée ou non. 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?

134
German Capuano

C'est 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++ restent pertinents. Je suis heureux d'annoncer que c'est le cas. Étonnamment, en fait. Ayant passé près de deux ans plongés dans les détails de C++ 0x, je m'attendais à gémir un peu lorsque j'ai examiné la table des matières de ce livre avec C++ 0x à l'esprit. Certains articles seraient certainement inappropriés. Mais le conseil que j'ai trouvé s'est avéré judicieux. Les développeurs C++ 0x préfèrent-ils les const, les enum et les inlines à #defines (Point 2)? Ils devraient. Devraient-ils empêcher les exceptions de laisser des destructeurs (élément 8)? Certainement. Devraient-ils utiliser des objets pour gérer les ressources? Déclarez les données membres private? Envisagez-vous des alternatives aux fonctions virtuelles? Facteur code indépendant des paramètres sur les modèles? (Articles 13, 22, 35 et 44.) Oui, oui, oui, oui! Mon objectif a toujours été de faire en sorte que la table des matières de Effective C++ résume les conseils donnés dans le livre. Ce résumé reste tout aussi applicable au développement C++ 0x qu’au développement "traditionnel" C++. C++ 0x est un langage plus volumineux et, à certains égards, différent, mais les techniques de base permettant d'utiliser efficacement le "vieux" C++ sont essentielles à l'utilisation efficace de C++ 0x.

Cela ne signifie pas que ce Effective C++ est une correspondance parfaite pour C++ 0x. Le livre n'aborde pas les nouvelles fonctionnalités de C++ 0x. Par conséquent, il manque des éléments permettant d'utiliser efficacement ces fonctionnalités. C++ 0xified Effective C++ efficace aurait certainement des éléments consacrés au déplacement des opérations, à l'initialisation uniforme et aux expressions lambda, et comporterait probablement un chapitre entier sur l'utilisation efficace de l'API de simultanéité. Un tel livre contiendrait également différents exemples, par exemple des exemples 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, pas de la commission.

[~ # ~] mettre à jour [~ # ~] : le nouveau titre Effective C++ est en vente depuis novembre 2014 de O'Reilly et Amazon (et beaucoup d'autres que vous pouvez rechercher sur Google).

88
TemplateRex

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

44
cdmh

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++ préfère toujours la vitesse à la sécurité, et de nombreux problèmes dans Effective C++ tournent autour de cela.

Les niquement types de points sur lesquels je m'attendrais à être invalides sont ceux qui disent: "Ne faites pas ceci, faites ceci à la place." "Ne fais pas ça" sera toujours valide. Mais C++ aura résolu certains problèmes. En particulier, toutes les recommandations d'utilisation de boost sont probablement déconseillées, car C++ 11 inclut de nombreuses fonctionnalités que Meyers renvoie spécifiquement au lecteur de Boost.

20
djechlin