software.wikisort.org - Langage_de_programmation 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 février 2020 [3] , approuvée le 4 septembre 2020 [4] , [5] , et publiée par l'ISO en décembre 2020 [6] .
Le dernier working draft gratuit est le N4861 , qui date du 1er avril 2020 , les seules différences avec le standard étant des corrections éditoriales.
Fonctionnalités
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[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] .
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] .
Références
(en) « The Standard » , isocpp.org (en) Herb Sutter, « P1000R3: C++ IS schedule » [ PDF] , 1er octobre 2019 (en) Hana Dusíková, « N4817: 2020 Prague Meeting Invitation and Information » [ PDF] , 6 novembre 2019 (en) « Current Status » , isocpp.org (en) Herb Sutter, « C++20 approved, C++23 meetings and schedule update » , Sutter's Mill , 6 septembre 2020 (en) « ISO/IEC 14882:2020 » (en) Herb Sutter, « Why does the C++ standard ship every three years? » , Sutter's Mill , 13 juillet 2019 (en) Ville Voutilainen, « P0592R0 - To boldly suggest an overall plan for C++20 » , 5 février 2017 (en) Gabriel Dos Reis, « P0606R0 - Concepts Are Ready » [ PDF] , 25 février 2017 (en) Gabriel Dos Reis, « N4720 - Working Draft, Extensions to C++ for Modules » [ PDF] , 29 janvier 2018 (en) Tim Shen et Richard Smith, « P0329R4 - Designated Initialization Wording » [ PDF] , 12 juillet 2017 (en) Thomas Köppe, « P0409r2 - Allow lambda capture [=, this] » , 4 mars 2017 (en) Louis Dionne, « P0428R2 - Familiar template syntax for generic lambdas » , 13 juillet 2017 (en) Herb Sutter, Jens Maurer et Walter E. Brown, « P0515R3 - Consistent comparison » [ PDF] , 10 novembre 2017 (en) Thomas Köppe, « P0614R0 - Range-based for statements with initializer » , 18 mars 2017 (en) Louis Dionne et Hubert Tong, « P0315R4 - Wording for lambdas in unevaluated contexts » , 10 novembre 2017 (en) Louis Dionne, « P0624R2 - Default constructible and assignable stateless lambdas » [ PDF] , 10 novembre 2017 (en) Barry Revzin, « P0780R0 - Pack expansion in lambda init-capture » , www.open-std.org , 8 octobre 2017 (en) Louis Dionne et Hana Dusíková, « P0424R2 - String literals as non-type template parameters » [ PDF] , 14 novembre 2017 (en) Nina Ranns et Daveed Vandevoorde, « P0634R3 - Down with typename! » , 14 mars 2018 (en) Richard Smith, « P0840R2 - Language support for empty objects » , 12 mars 2018 (en) Clay Trychta, « P0479R5 - Proposed wording for likely and unlikely attributes » , 16 mars 2018 (en) Barry Revzin et Stephan T. Lavavej, « P0892R2 - explicit(bool) » , 8 juin 2018 (en) Peter Dimov et Vassil Vassilev, « P1064R0 - Allowing Virtual Function Calls in Constant Expressions » , 4 mai 2018 (en) Louis Dionne et David Vandevoorde, « P1330R0 - Changing the active member of a union inside constexpr » [ PDF] , 10 novembre 2018 (en) Louis Dionne, « P1002R0 - Try-catch blocks in constexpr functions » [ PDF] , 1er avril 2018 (en) Peter Dimov, Vassil Vassilev et Richard Smith, « P1327R1 - Allowing dynamic_cast, polymorphic typeid in Constant Expressions » , 8 novembre 2018 (en) Louis Dionne, « P1006R1 - Constexpr in std::pointer_traits » [ PDF] , 7 octobre 2018 (en) Richard Smith, Andrew Sutton et Daveed Vandevoorde, « P1073R2 - Immediate functions » , 4 octobre 2018 (en) Jens Maurer, « P1236R0 - Alternative Wording for P0907R4 Signed Integers are Two's Complement » , 8 octobre 2018 (en) Hans-J. Boehm, Olivier Giroux et Viktor Vafeiades, « P0668R4 - Revising the C++ memory model » , 24 juin 2018 (en) Nicolas Lesser, « P1091R2 - Extending structured bindings to be more like variable declarations » , 10 novembre 2018 (en) Gor Nishanov, « N4649 - Working Draft, Technical Specification on C++ Extensions for Coroutines » [ PDF] , 3 mars 2017 (en) Gašper Ažman et Jonathan Müller, « P1099R5 - Using Enum » , 26 juillet 2019 (en) Eric Fiselier, « P1143R2 - Adding the constinit keyword » , 18 juillet 2019 (en) Eric Niebler, Casey Carter et Christopher Di Bella, « P0896R3 - The One Ranges proposal » , 7 octobre 2018 (en) Peter Dimov et Glen Fernandes, « P0674R1 - Extending make_shared to Support Arrays » , 12 juillet 2017 (en) Alisdair Meredith, « P0718R2 - Revising atomic_shared_ptr for C++20 » , 10 novembre 2017 (en) Glen Joseph Fernandes, « P0653R2 - Utility to convert a pointer to a raw pointer » , 9 novembre 2017 (en) Howard E. Hinnant et Tomasz Kamiński, « P0355R7 - Extending <chrono> to Calendars and Time Zones » , 16 mars 2018 (en) Neil MacIntosh et Stephan T. Lavavej, « P0122R7 - span: bounds-safe views for sequences of objects » [ PDF] , 16 mars 2018 (en) Alisdair Meredith et Stephan T. Lavavej, « P1209R0 - Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 » , 4 octobre 2018 (en) Alan Talbot, « P0754R2 - <version> » [ PDF] , 13 mars 2018 (en) JF Bastien, « P0476R2 - Bit-casting object representations » , 10 novembre 2017 (en) Ville Voutilainen et Jonathan Wakely, « P0941R2 - Integrating feature-test macros into the C++ WD » , 8 juin 2018 (en) Antony Polukhin, « P1032R1 - Misc constexpr bits » , 1er octobre 2018 (en) Glen Joseph Fernandes et Peter Dimov, « P1020R1 - Smart pointer creation with default initialization » , 6 novembre 2018 (en) Mikhail Maltsev, « P0458R2 - Checking for Existence of an Element in Associative Containers » , 6 juin 2018 (en) « P0553R4: Bit operations » , www.open-std.org , 20 juillet 2019 (en) Jens Maurer, « P0556R3 - Integral power-of-2 operations » , 6 juin 2018 (en) Chris Kennelly, « P1355R2 - Exposing a narrow contract for ceil2 » , 11 juin 2019 (en) Vincent Reverdy, « P1956R1 - On the names of low-level bit manipulation functions » , 11 février 2020 (en) Tomasz Kamiński, « P0356R3 - Simplified partial function application » , 9 novembre 2017 (en) « C++ keywords - cppreference.com » , en.cppreference.com (en) Jared Hoberock, « N4793 - C++ Extensions for Parallelism Version 2 » [ PDF] , 26 novembre 2018 (en) Jonathan Wakely, « N4711 - C++ Extensions for Networking » [ PDF] , 27 novembre 2017 (en) David Sankel, « N4818 - C++ Extensions for Reflection » [ PDF] , 17 juin 2019 (en) Herb Sutter, « Trip report: Summer ISO C++ standards meeting (Cologne) » , Sutter's Mill , 20 juillet 2019 (en) Jens Weller, « Reflections on the reflection proposals - Meeting C++ » , meetingcpp.com , 2 mars 2017 (en) Matus Chochlik, Axel Naumann et David Sankel, « P0194R6 - Static reflection » , 16 mars 2018 (en) Herb Sutter, « P0707R0 - Metaclasses » [ PDF] , 18 juin 2017 (en) Jared Hoberock, Michael Garland, Chris Kohlhoff et al. , « P0443R10 - A Unified Executors Proposal for C++ » , 21 janvier 2019 (en) Jonathan Wakely, « N4771 - Working Draft, C++ Extensions for Networking » , 8 octobre 2018 (en) « ISO/IEC TS 19216:2018 Programming Languages -- C++ Extensions for Networking » (en) David Hollman, Chris Kohlhoff, Bryce Lelbach et al. , « P1393R0 - A General Property Customization Mechanism » , 13 janvier 2019 (en) Lee Howes, Bryce Adelstein Lelbach, David S. Hollman et Michał Dominiak, « P1054R0 - A Unified Futures Proposal for C++ » , 7 mai 2018 (en) Corentin Jabot, « P1161R2 - Deprecate uses of the comma operator in subscripting expressions » , 21 janvier 2019 (en) JF Bastien, « P1152R3 - Deprecating volatile » , 20 juillet 2019
Liens externes
Portail de la programmation informatique
Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike ; в отдельных случаях могут действовать дополнительные условия. Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.org внимательно изучите правила лицензирования конкретных элементов наполнения сайта.
2019-2025 WikiSort.org - проект по пересортировке и дополнению контента Википедии