Top Qs
Chronologie
Chat
Contexte
C++20
Norme de programmation informatique De Wikipédia, l'encyclopédie libre
Remove ads
C++20 est une version de la norme ISO / IEC définissant le langage de programmation C++[1]. La norme a été techniquement finalisée[2] par le WG21 lors de la réunion de Prague en [3], approuvée le [4],[5], et publiée par l'ISO en [6].
Le dernier working draft gratuit est le N4861, qui date du , les seules différences avec le standard étant des corrections éditoriales.
Remove ads
Fonctionnalités
Résumé
Contexte
C++20 ajoute plus de nouvelles fonctionnalités majeures que C++14 ou C++17[7]. Les modifications qui ont été acceptées ou discutées pour inclusion dans C++20 incluent[8] :
Langage
- Concepts (en)[9].
- Module[10].
- Initialiseurs nommés[11] (basés sur la fonctionnalité C99).
- Capture de
[=, this]par les lambda[12]. - Extension de la syntaxe des templates aux lambdas génériques[13].
- Comparaison trilatérale à l'aide de l'opérateur "spaceship" :
operator<=>[14]. - Initialisation de variables dans l'instruction range-based
for[15]. - Lambdas dans des contextes non évalués[16].
- Lambdas sans état constructibles et assignables par défaut[17].
- Pack extensions autorisés dans la capture par les lambda[18].
- Utilisation des chaînes littérales comme paramètres de templates[19].
Typenamefacultatif dans certaines circonstances[20].- Nouveaux attributs standard
[[no_unique_address]][21],[[likely]]et[[unlikely]][22]. explicitconditionnel permettant au modificateurexplicitde dépendre d'une expression booléenne[23].- Extension de
constexpraux fonctions virtuelles[24],union[25],try-catch[26],dynamic_castettypeid[27],std::pointer_traits[28]. - Nouveau mot-clé
constevalimposant l'évaluation à la compilation d'une fonction[29]. - L'utilisation du complément à deux pour représenter les entiers signés devient obligatoire[30].
- Révision du modèle de mémoire[31].
- Diverses améliorations des structured binding : interaction avec la capture des lambda, durée de stockage statique et thread_local[32].
- coroutines[33].
- Extension de
usingaux énumérationsenum class[34]. - Mot-clé
constinitimpose l'initialisation constante d'une variable constante statique[35].
Bibliothèque
- Ranges (One Ranges Proposal)[36].
std::make_sharedetstd::allocate_sharedsur les tableaux[37]- Pointeurs intelligents atomiques
std::atomic<shared_ptr<T>>etstd::atomic<weak_ptr<T>>[38]. std::to_addresspour convertir un pointeur en pointeur brut[39].- ajouts de calendriers et de fuseaux horaires à
<chrono>[40]. std::spanfournissant une vue sur un tableau contigu (analogue àstd::string_viewmais avec la possibilité de modifier la séquence référencée)[41].std::eraseetstd::erase_ifsimplifiant l'effacement des éléments pour la plupart des conteneurs standard[42].- Fichier d'en-tête
<version>[43]. std::bit_cast<>pour la conversion des représentations d'objets, moins verbeux quememcpy()et capable d'exploiter les structures internes du compilateur[44].- Macros de test de présence de fonctionnalités[45].
- Généralisation de
constexprdans la bibliothèque standard[46]. - Fonctions d'initialisation par défaut des pointeurs intelligents[47].
- Fonction
std::map::contains[48]. - Opérations binaires : comptage du nombre de zéro ou de un, en début ou en fin de nombre, rotation de bit[49].
- Manipulation de puissance de 2[50],[51],[52].
std::bind_front[53].
Ajouts et modifications de mots clés
Ajout de nombreux nouveaux mots-clés : concept, constinit[35], consteval, co_await, co_return, co_yield, requires et char8_t (support d'UTF-8)[54].
Ajout d'identifiants avec une signification particulière : import et module.
Publication de Technical Specification
Reporté à une version ultérieure
- Contrats : un nouveau groupe d'étude (SG21) a été formé pour travailler sur une nouvelle proposition[58]
- Réflexion[59],[60].
- Métaclasses[61].
- Exécuteurs[62].
- Gestion du réseau[63],[64], y compris asynchrone, services d'entrée/sortie de base, temporisations, tampons et flux orientés tampon, sockets et protocoles Internet (bloqués par les exécuteurs).
- Propriétés[65].
- Futures étendus[66].
Remove ads
Fonctionnalités supprimées et dépréciées
C++20 a également supprimé certaines fonctionnalités :
- Les en-têtes dérivés du C
<ccomplex>,<ciso646>,<cstdalign>,<cstdbool>et<ctgmath>ont été supprimés car inutiles en C++ (les en-tête<*.h>restent, pour la compatibilité avec C. ). - L'utilisation de
throw()comme spécification d'exception a été supprimée. - Certaines fonctionnalités de bibliothèque précédemment dépréciées ont été supprimées, notamment
std::uncaught_exception,std::raw_storage_iterator,std::is_literal_type,std::is_literal_type_v,std::result_ofetstd::result_of_t.
Les fonctionnalités dépréciées incluent :
Remove ads
Références
Liens externes
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads