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].

Faits en bref Date de première version, Site web ...

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].
  • Typename facultatif dans certaines circonstances[20].
  • Nouveaux attributs standard [[no_unique_address]][21], [[likely]] et [[unlikely]][22].
  • explicit conditionnel permettant au modificateur explicit de dépendre d'une expression booléenne[23].
  • Extension de constexpr aux fonctions virtuelles[24], union[25], try - catch[26], dynamic_cast et typeid[27], std::pointer_traits[28].
  • Nouveau mot-clé consteval imposant 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 using aux énumérations enum class[34].
  • Mot-clé constinit impose l'initialisation constante d'une variable constante statique[35].

Bibliothèque

  • Ranges (One Ranges Proposal)[36].
  • std::make_shared et std::allocate_shared sur les tableaux[37]
  • Pointeurs intelligents atomiques std::atomic<shared_ptr<T>> et std::atomic<weak_ptr<T>>[38].
  • std::to_address pour convertir un pointeur en pointeur brut[39].
  • ajouts de calendriers et de fuseaux horaires à <chrono>[40].
  • std::span fournissant une vue sur un tableau contigu (analogue à std::string_view mais avec la possibilité de modifier la séquence référencée)[41].
  • std::erase et std::erase_if simplifiant 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 que memcpy() et capable d'exploiter les structures internes du compilateur[44].
  • Macros de test de présence de fonctionnalités[45].
  • Généralisation de constexpr dans 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

  • Parallelism TS v2[55].
  • Networking TS v1[56]
  • Reflection TS v1[57]

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_of et std::result_of_t.

Les fonctionnalités dépréciées incluent :

  • L'utilisation de l'opérateur virgule dans les expressions d'indiçage[67].
  • La plupart des usages de volatile[68].
Remove ads

Références

Liens externes

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads