C++11/C++14/C++17 apportent plusieurs ajouts au langage cœur et étendent la bibliothèque standard du C++. Certaines de ces nouvelles fonctionnalités sont très faciles à utiliser et apportent une valeur significative à vos projets C++.
Il peut être utile de détecter automatiquement les endroits où certaines des nouvelles fonctionnalités de C++11 peuvent être utilisées. À cette fin, clang-tidy est un outil autonome permettant de convertir automatiquement du code C++ écrit selon d'anciennes normes pour utiliser les fonctionnalités de la norme C++ la plus récente, lorsque cela est pertinent.
Les développeurs qui utilisent Clang peuvent facilement profiter de l'outil clang-tidy. En revanche, pour les développeurs Visual C++ et les utilisateurs d'autres compilateurs, il n'est pas aussi facile de bénéficier des résultats de cet outil utile.
Pour permettre à tous les développeurs C++ de profiter de cet outil, CppDepend l'intègre désormais dans sa version Windows 2018.1 afin de détecter les endroits où les fonctionnalités suivantes pourraient être utilisées :
- Override : détecte les endroits où vous pouvez ajouter le spécificateur override aux fonctions membres qui redéfinissent une fonction virtuelle d'une classe de base et qui ne le possèdent pas encore.
- Loop Convert : détecte les boucles de type for(…; …; …) qui peuvent être remplacées par les nouvelles boucles basées sur des intervalles introduites dans C++11, et fournit l'expression de boucle correspondante.
- Pass-By-Value : détecte les paramètres const-ref qui tireraient profit de l'idiome du passage par valeur.
- auto_ptr : détecte les utilisations du déprécié std::auto_ptr et les remplace par std::unique_ptr.
- Spécificateur auto : détecte les endroits où le spécificateur de type auto peut être utilisé dans les déclarations de variables.
- nullptr : détecte les littéraux nuls à remplacer par nullptr lorsque c'est possible.
- std::bind : cette vérification trouve les utilisations de
std::bindet remplace les cas simples par des lambdas. Les lambdas utilisent la capture par valeur lorsque c'est nécessaire. - En-têtes dépréciés : certains en-têtes hérités de la bibliothèque C ont été dépréciés en C++ et ne sont plus recommandés dans les bases de code C++. Certains n'ont aucun effet en C++. Pour plus de détails, reportez-vous à la section [depr.c.headers] de la norme C++14.
- std::shared_ptr : cette vérification trouve la création de
std::shared_ptrobjets en appelant explicitement le constructeur et unnewexpression, et la remplace par un appel àstd::make_shared. - std::unique_ptr : cette vérification trouve la création de
std::unique_ptrobjets en appelant explicitement le constructeur et unnewexpression, et la remplace par un appel àstd::make_unique, introduite dans C++14. - Littéraux de chaînes brutes : cette vérification remplace de manière sélective les littéraux de chaînes contenant des caractères échappés par des littéraux de chaînes brutes (raw string literals).
Comment utiliser cette fonctionnalité ?
Cette fonctionnalité n'est pas activée par défaut ; vous pouvez l'activer depuis « Propriétés du projet » => Analyse => Moderniser le code C++. Notez cependant que son activation augmente le temps nécessaire à l'analyse de votre base de code ; nous vous recommandons donc de la désactiver une fois que vous n'avez plus besoin des résultats.

Après l'analyse, vous trouverez les requêtes CQLinq contenant les recommandations C++11 dans le groupe « Modernize C++ Code » :

Pour chaque requête, vous pouvez voir les endroits où votre code peut être modernisé. Vous pouvez double-cliquer sur chaque résultat pour atteindre l'emplacement du code source où l'amélioration peut être appliquée.

Ce qui rend les recommandations fournies par l'outil de modernisation de Clang particulièrement utiles, c'est qu'elles couvrent certaines des fonctionnalités C++11 les plus précieuses, faciles à introduire dans votre code source et susceptibles d'apporter une valeur significative à vos projets C++.
