C++23 est sorti : aperçu des changements clés du nouveau standard
Un événement marquant s'est produit dans le monde des langages de programmation — le comité international de normalisation C++ (ISO/IEC JTC1/SC22/WG21) a officiellement approuvé la nouvelle version du langage : C++23. Cette version, qui succède à C++20, n'est pas révolutionnaire, mais contient de nombreuses améliorations attendues et utiles qui rendront le code plus propre, plus sûr et plus performant. Passons en revue les innovations les plus importantes.
Principales nouveautés de C++23
1. std::print et std::println — le remplacement moderne de cout
Sans doute le changement le plus notable pour la programmation quotidienne. Les fonctions std::print et std::println, basées sur le puissant formatage de std::format (C++20), ont été ajoutées à la bibliothèque standard. Désormais, l'affichage dans la console est non seulement plus pratique, mais aussi nettement plus rapide qu'avec std::cout.
- Exemple :
std::println("Bonjour, {} ! Réponse : {}", name, 42); - Avantages : sécurité de type, syntaxe lisible, prise en charge d'Unicode.
2. deducing this (P0847R7) — spécification explicite de this
L'une des innovations les plus puissantes pour la métaprogrammation et la création de bibliothèques. Il est désormais possible de passer explicitement l'objet this comme paramètre d'une fonction membre. Cela résout d'anciens problèmes avec les lambdas et le CRTP (Curiously Recurring Template Pattern).
- Permet d'écrire une seule fonction membre qui fonctionne à la fois avec des objets const et non-const.
- Simplifie l'implémentation du modèle de "surcharge par qualificateurs".
3. Opérateurs multidimensionnels operator[] (P2128R6)
Une fonctionnalité longtemps attendue — désormais operator[] peut accepter plusieurs arguments. C'est crucial pour les bibliothèques manipulant des tableaux multidimensionnels (par exemple, mdspan ou vos propres matrices).
- Avant :
matrix(2, 3)oumatrix[{2,3}] - Maintenant :
matrix[2, 3]— naturel et concis.
4. std::expected — gestion fonctionnelle des erreurs
Une alternative aux exceptions et aux codes de retour. Le type std::expected<T, E> contient soit une valeur correcte, soit une erreur. C'est particulièrement précieux dans les systèmes où les exceptions sont interdites (systèmes embarqués, noyaux d'OS).
5. Améliorations des modules et des concepts
Les modules (C++20) ont reçu des corrections et une stabilisation. Ils sont désormais mieux pris en charge par les compilateurs. Les concepts sont devenus plus flexibles, avec la possibilité d'utiliser auto dans les paramètres des concepts.
Quoi d'autre à noter ?
std::mdspan— span multidimensionnel pour travailler avec des tableaux.- Corrections dans
std::ranges— stabilisation et comblement des lacunes de l'API. - Attribut
[[assume]]— indications au compilateur pour l'optimisation. - Appels statiques de
operator()— possibilité