Note : 9 ; De la même veine et de la même qualité que le 1er volume
Effective C++ fut indéniablement un succès. La formule a depuis été reprise par d’autres auteurs, empruntant souvent la même qualité de pertinence technique. Mais ces autres textes n’ont pas la verve d’un Scott Meyers ! Ce second volume est de la même eau que le premier. Ici les centres d’intérêts se focalisent sur un certain nombre de sujets précis (exceptions, casts, etc…) et l’auteur développe plus son propos. D’ailleurs le nombre de règles est plus réduit, tandis que le nombre de pages a augmenté, passant à 290 pages.
L’auteur a structuré son propos en 6 thèmes. Les « basiques » couvrent 4 items plutôt simples sur une quinzaine de pages. La seule « nouveauté » étant les cast C++ apparus depuis peu (à l’époque). La seconde partie couvre aussi 4 items, cette fois sur une vingtaine de pages et sur un sujet plus particulier : les opérateurs. Outre les subtilités dont l’auteur nous régale comme à son habitude, je relève ici deux items particulièrement importants : les écritures idiomatiques des opérateurs pré et post incréments, et les différentes formes des opérateurs new et delete.
La troisième partie nous conduit vers un sujet délicat avec les exceptions : 7 items leur sont dédiés sur 35 pages. Ici, il s’agit tout au long de ces items de nous faire prendre conscience des implications et des limites de leur usage : fuite de mémoire, contraintes au sein des constructeurs et des destructeurs, impact sur les performances, etc. Il y a de quoi s’enfuir, ce qui n’est pas le propos de l’auteur.
L’efficacité est au cœur de la quatrième partie, avec 9 items sur 40 pages. La plupart d’entre-eux traitent plutôt de conception que de C++ sensu-stricto, mais n’en sont pas moins intéressants. L’item le plus intéressant concerne le « return value optimization » et dans une moindre mesure l’introduction au RTTI, tandis que l’item sur la conversion implicite a été rendu depuis obsolète par le mot-clé explicit.
Avec ses 130 pages pour seulement 7 items, la 5ème partie « Technics » est la plus conséquente de l’ouvrage. Il s’agit d’une sorte de « boite à outils » de l’auteur constituée de constructions idiomatiques pour des sujets tels que le comptage de références, les pointeurs intelligents ou les allocations forcées sur la pile ou sur le tas. Nombre de ces idées sont passées d’intérêt avec le C++ 17 mais n’en sont pas moins d’excellents exercices de l’esprit. Enfin la dernière partie est celle des « divers ». Il y a en effet peu de points communs entre les 4 items couvrant la trentaine de pages restantes. Il s’agit plus généralement de directives sur la manière de considérer nos apprentissages futurs au-delà de ce volume.
La qualité est toujours au rendez-vous, ce qui fait de ce second tome un complément tout aussi indispensable au premier volume. Ce livre n’existe pas en version traduite, mais un CD existe, qui regroupe les 2 livres et quelques articles annexes, consultable en hypertexte. Contrairement au premier volume qui a été l’objet de 3 éditions et d’autant de mises à jour suivant l’évolution du standard, celui-ci est resté tel quel, et c’est bien dommage ! Certes il témoigne du C++ à l’ancienne mais même en éliminant certains items au profit d’autres et en modernisant les existants, ce texte serait resté tout à fait pertinent. Maintenant que Scott Meyers a décidé de prendre sa retraite, cette idée est à oublier.
Référence complète : More effective C++, 35 new ways to improve your programs and design – Scott Meyers – Addison Wesley / Professional Computing series 1996 – ISBN: 0-201-63371-X