Nouveau standard C++23 : changements clés et améliorations du langage

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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::generator pour 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::latch et std::barrier pour la synchronisation des threads, ainsi qu'un std::counting_semaphore amé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.

Recommended Libraries