Nouveau standard C++23 publié : ce qui a changé et comment cela affectera le développement
Le comité international de normalisation C++ (ISO/IEC JTC1/SC22/WG21) a officiellement approuvé la nouvelle version du langage — C++23. Cette version n'est pas aussi fondamentale que C++11 ou C++20, mais elle inclut de nombreuses améliorations très attendues qui rendront le code plus sûr, plus expressif et plus performant. Analysons les principales nouveautés que tout développeur C++ doit connaître.
Principaux changements dans C++23
- Deducing this (P0847R7) — la nouveauté la plus attendue. Il est désormais possible de spécifier explicitement l'objet sur lequel une méthode est appelée, ce qui simplifie la surcharge pour lvalue/rvalue, les versions constantes et non constantes, et élimine la duplication de code dans les modèles CRTP.
- std::expected (P0323R12) — un type pour la gestion des erreurs sans exceptions, une alternative à std::optional et aux exceptions. Il permet de retourner soit une valeur, soit une erreur, ce qui est crucial pour les systèmes ayant des exigences strictes en matière de performances.
- Modules std (P2465R3) — la bibliothèque standard est désormais exportée via des modules, ce qui accélère la compilation et améliore l'isolation du code. Par exemple,
import std;remplace des dizaines de#include. - Améliorations des coroutines — ajout du type
std::generatorpour les séquences paresseuses et correction de nombreux problèmes de performance et d'ergonomie des coroutines de C++20. - Multithreading — nouveau mécanisme
std::latchetstd::barrierpour la synchronisation des threads, ainsi qu'unstd::counting_semaphoreamélioré.
Qu'est-ce que cela signifie pour les développeurs ?
C++23 ne casse pas la rétrocompatibilité, mais introduit de nouvelles pratiques. Par exemple, deducing this simplifie l'écriture de bibliothèques, et std::expected remplacera progressivement les vérifications lourdes de codes de retour. De nombreux compilateurs (GCC 13+, Clang 16+, MSVC 2022 17.6+) prennent déjà en charge une partie des fonctionnalités.
Pour ceux qui travaillent avec des systèmes à forte charge, les modules (accélération de la compilation de 20 à 40 %) et la gestion améliorée des erreurs sans exceptions sont particulièrement importants. Si vous utilisez C++20, la migration vers C++23 ne nécessitera pas de réécriture du code — il suffit d'activer le nouveau drapeau de compilation.
Quand attendre un support complet ?
Le support complet de C++23 est attendu dans les compilateurs d'ici la fin 2024. En attendant, vous pouvez tester des fonctionnalités individuelles avec les drapeaux -std=c++2b (GCC/Clang) ou /std:c++latest (MSVC). Nous recommandons de commencer par std::expected et deducing this — ce sont les plus utiles dans les projets réels.
Des exemples de code à jour et une comparaison avec C++20 se trouvent dans la documentation des compilateurs. C++23 est une étape évolutive qui rend le langage plus sûr et plus pratique, sans sacrifier les performances.