C++26 : Un bond considérable pour les fonctionnalités de la bibliothèque standard en temps de compilation

2025-05-01

C++26 s'apprête à révolutionner la programmation en temps de compilation grâce à une amélioration massive du support constexpr dans la bibliothèque standard. Plusieurs propositions (P2562R1, P1383R2, P3074R7, P3372R2, P3508R0, P3369R0) intègrent des algorithmes de tri stables, des fonctions et , des règles d'union améliorées, presque tous les conteneurs et adaptateurs, et des algorithmes de mémoire spécialisés dans la catégorie constexpr. Cela améliore considérablement les capacités de temps de compilation, permettant, par exemple, le tri en temps de compilation des conteneurs constexpr. Bien que std::hive et std::hash restent exclus en raison de limitations, C++26 promet une expansion spectaculaire des possibilités de programmation en temps de compilation.

Lire plus
Développement bibliothèque standard

C++26 : Un bond géant pour constexpr

2025-04-23

C++26 s'apprête à révolutionner constexpr ! Les fonctionnalités à venir incluent les conversions constexpr depuis void*, permettant une manipulation de mémoire plus flexible au moment de la compilation ; constexpr placement new, permettant le placement d'objets dans des expressions constantes ; et les liaisons structurées constexpr, apportant des liaisons structurées au moment de la compilation. Ces améliorations étendent considérablement la portée de constexpr et confèrent à la bibliothèque standard des capacités améliorées au moment de la compilation.

Lire plus
Développement calcul à la compilation

Performances des Ranges en C++20 : Un revirement surprenant

2025-04-19

L'auteur a remplacé une boucle brute par `std::ranges::transform` dans un projet C++, en attendant une amélioration des performances. Les tests ont révélé un résultat surprenant : une boucle brute optimisée (utilisant `emplace_back` et `reserve`) s'est avérée 20% plus rapide sur Clang et 10% plus rapide sur GCC. L'article compare différentes approches, en soulignant les performances et la lisibilité du code. La conclusion : privilégiez la lisibilité à moins que les performances ne soient un goulot d'étranglement critique.

Lire plus
Développement

C++26 : Résumé des fonctionnalités supprimées et obsolètes

2025-03-20

C++26 supprime ou déprécie plusieurs fonctionnalités. Cela inclut la suppression complète du `typedef` `std::allocator` obsolète en C++20, et la surcharge sans argument de `std::basic_string::reserve()`; la suppression des utilitaires de conversion Unicode obsolètes et de `std::strtok`; la suppression des anciens `strstreams` et des API d'accès atomique `std::shared_ptr`; et la suppression de `std::wstring_convert`. De plus, `std::is_trivial` est obsolète, et il est suggéré d'utiliser les alternatives `is_trivially_XXX` plus précises ; et `std::memory_order::consume` est obsolète en raison d'une spécification insatisfaisante et de difficultés d'implémentation. Ces suppressions et dépréciations visent à améliorer la sécurité et l'efficacité du langage, et à nettoyer les fonctionnalités obsolètes.

Lire plus

C++26 : L'indexation des paquets simplifie l'extraction des éléments

2025-01-24

Alors que C++11 introduisait les paquets de paramètres, l'extraction d'éléments spécifiques restait fastidieuse. C++26, grâce à la proposition P2662R3, introduit l'indexation des paquets, permettant un accès direct aux éléments du paquet en utilisant l'opérateur de soulignement, par exemple `T...[0]` pour le premier élément. Cela conduit à un code plus propre, plus lisible et à de meilleures performances de compilation. Bien que l'indexation négative et la découpe ne soient pas encore prises en charge, la fonctionnalité est déjà très utilisable et améliore considérablement le développement C++.

Lire plus

C++26 : L'espace réservé anonyme '_' arrive

2025-01-11

C++26 introduit une fonctionnalité révolutionnaire : l'espace réservé anonyme '_'. Cela résout un problème de longue date en C++ : la gestion des variables inutilisées. Auparavant, les développeurs devaient utiliser `[[maybe_unused]]` ou `std::ignore` pour éviter les avertissements du compilateur, surtout avec les liaisons structurées. L'espace réservé '_' peut être déclaré plusieurs fois sans conflit et possède implicitement l'attribut `[[maybe_unused]]`, simplifiant le code et améliorant la lisibilité. Cette fonctionnalité est déjà implémentée dans GCC 14 et Clang 18.

Lire plus