Blogueurs, influenceurs et membres du comité de normalisation C++ prônent activement l'usage du C++ moderne. À travers articles, tutoriels et réseaux sociaux, ils mettent en lumière les atouts et les fonctionnalités innovantes des dernières normes C++, dans le but d'informer et d'inspirer la communauté des développeurs. Leurs efforts conjugués visent à encourager l'adoption du C++ moderne, en tirant parti de ses capacités avancées pour écrire un code plus efficace, plus maintenable et plus robuste.
Cependant, tous les développeurs C++ ne sont pas favorables à l'adoption du C++ moderne, pour diverses raisons. C'est ainsi qu'est apparue l'approche du C++ orthodoxe, qui préconise l'utilisation d'un sous-ensemble minimal du C++.
Le C++ orthodoxe, tel que défini par ses adeptes
Le C++ orthodoxe (parfois désigné sous le nom de C+) est un sous-ensemble minimal du C++ qui améliore le C, tout en évitant tout ce que le C++ moderne a de superflu. C'est l'exact opposé de ce que le C++ moderne est censé être.
Pour résumer, les adeptes du C++ orthodoxe sont les partisans du C++ présenté par Bjarne Stroustrup il y a quarante ans :
Voici quelques exemples de projets relevant de l'approche C++ orthodoxe :
- DOOM 3 BFG
- Qt (lorsqu'il est compilé sans RTTI ni exceptions)
- dear imgui
- bgfx
- TheForge
- Oryol
- Network Next SDK
Règles privilégiées du C++ orthodoxe :
- Un C++ proche du C est un bon point de départ. Si le code ne requiert pas davantage de complexité, n'y ajoutez pas de complexité C++ inutile. En règle générale, le code devrait rester lisible par quiconque maîtrise le langage C.
- Ne faites pas cela: la fin du « raisonnement de conception » en C++ orthodoxe devrait intervenir juste après « Très simple, et ça fonctionne. EOF».
- N'utilisez pas d'exceptions.
- N'utilisez pas le RTTI.
- N'utilisez pas les en-têtes C++ qui enveloppent ceux de la bibliothèque C (
<cstdio>,<cmath>, etc.), utilisez plutôt ceux du C (<stdio.h>,<math.h>, etc.) - N'utilisez pas les flux (
<iostream>,<stringstream>, etc.), utilisez plutôt les fonctions de type printf. - N'utilisez rien de la STL qui alloue de la mémoire.
- N'abusez pas de la métaprogrammation à des fins purement académiques. Utilisez-la avec modération, uniquement là où elle est nécessaire et là où elle réduit la complexité du code.
Comme on le voit, les partisans du C++ orthodoxe préconisent l'usage d'un sous-ensemble minimal du C++, mais les ressources en ligne laissent penser qu'ils sont minoritaires. De fait, la majorité se prononce en faveur du C++ moderne. Pourtant, à l'échelle de la communauté C++ dans son ensemble, la question reste posée : la plupart des développeurs utilisent-ils activement les fonctionnalités modernes, ou s'en tiennent-ils essentiellement aux concepts de base ?
Il est impossible d'apporter une réponse précise à cette question, mais il est clair que de nombreux projets restent fidèles à l'approche orthodoxe en raison de leur base de code héritée. Cela empêche souvent les développeurs de passer au C++ moderne, et entretient la prédominance des concepts C++ fondamentaux.
