Accueil🇫🇷Chercher

C++20

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

C++20
Date de première version
Site web www.iso.org/standard/79358.html

Le dernier working draft gratuit est le N4861, qui date du , 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

  1. (en) « The Standard », isocpp.org
  2. (en) Herb Sutter, « P1000R3: C++ IS schedule » [PDF],
  3. (en) Hana Dusíková, « N4817: 2020 Prague Meeting Invitation and Information » [PDF],
  4. (en) « Current Status », isocpp.org
  5. (en) Herb Sutter, « C++20 approved, C++23 meetings and schedule update », Sutter's Mill,
  6. (en) « ISO/IEC 14882:2020 »
  7. (en) Herb Sutter, « Why does the C++ standard ship every three years? », Sutter's Mill,
  8. (en) Ville Voutilainen, « P0592R0 - To boldly suggest an overall plan for C++20 »,
  9. (en) Gabriel Dos Reis, « P0606R0 - Concepts Are Ready » [PDF],
  10. (en) Gabriel Dos Reis, « N4720 - Working Draft, Extensions to C++ for Modules » [PDF],
  11. (en) Tim Shen et Richard Smith, « P0329R4 - Designated Initialization Wording » [PDF],
  12. (en) Thomas Köppe, « P0409r2 - Allow lambda capture [=, this] »,
  13. (en) Louis Dionne, « P0428R2 - Familiar template syntax for generic lambdas »,
  14. (en) Herb Sutter, Jens Maurer et Walter E. Brown, « P0515R3 - Consistent comparison » [PDF],
  15. (en) Thomas Köppe, « P0614R0 - Range-based for statements with initializer »,
  16. (en) Louis Dionne et Hubert Tong, « P0315R4 - Wording for lambdas in unevaluated contexts »,
  17. (en) Louis Dionne, « P0624R2 - Default constructible and assignable stateless lambdas » [PDF],
  18. (en) Barry Revzin, « P0780R0 - Pack expansion in lambda init-capture », www.open-std.org,
  19. (en) Louis Dionne et Hana Dusíková, « P0424R2 - String literals as non-type template parameters » [PDF],
  20. (en) Nina Ranns et Daveed Vandevoorde, « P0634R3 - Down with typename! »,
  21. (en) Richard Smith, « P0840R2 - Language support for empty objects »,
  22. (en) Clay Trychta, « P0479R5 - Proposed wording for likely and unlikely attributes »,
  23. (en) Barry Revzin et Stephan T. Lavavej, « P0892R2 - explicit(bool) »,
  24. (en) Peter Dimov et Vassil Vassilev, « P1064R0 - Allowing Virtual Function Calls in Constant Expressions »,
  25. (en) Louis Dionne et David Vandevoorde, « P1330R0 - Changing the active member of a union inside constexpr » [PDF],
  26. (en) Louis Dionne, « P1002R0 - Try-catch blocks in constexpr functions » [PDF],
  27. (en) Peter Dimov, Vassil Vassilev et Richard Smith, « P1327R1 - Allowing dynamic_cast, polymorphic typeid in Constant Expressions »,
  28. (en) Louis Dionne, « P1006R1 - Constexpr in std::pointer_traits » [PDF],
  29. (en) Richard Smith, Andrew Sutton et Daveed Vandevoorde, « P1073R2 - Immediate functions »,
  30. (en) Jens Maurer, « P1236R0 - Alternative Wording for P0907R4 Signed Integers are Two's Complement »,
  31. (en) Hans-J. Boehm, Olivier Giroux et Viktor Vafeiades, « P0668R4 - Revising the C++ memory model »,
  32. (en) Nicolas Lesser, « P1091R2 - Extending structured bindings to be more like variable declarations »,
  33. (en) Gor Nishanov, « N4649 - Working Draft, Technical Specification on C++ Extensions for Coroutines » [PDF],
  34. (en) Gašper Ažman et Jonathan Müller, « P1099R5 - Using Enum »,
  35. (en) Eric Fiselier, « P1143R2 - Adding the constinit keyword »,
  36. (en) Eric Niebler, Casey Carter et Christopher Di Bella, « P0896R3 - The One Ranges proposal »,
  37. (en) Peter Dimov et Glen Fernandes, « P0674R1 - Extending make_shared to Support Arrays »,
  38. (en) Alisdair Meredith, « P0718R2 - Revising atomic_shared_ptr for C++20 »,
  39. (en) Glen Joseph Fernandes, « P0653R2 - Utility to convert a pointer to a raw pointer »,
  40. (en) Howard E. Hinnant et Tomasz Kamiński, « P0355R7 - Extending <chrono> to Calendars and Time Zones »,
  41. (en) Neil MacIntosh et Stephan T. Lavavej, « P0122R7 - span: bounds-safe views for sequences of objects » [PDF],
  42. (en) Alisdair Meredith et Stephan T. Lavavej, « P1209R0 - Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 »,
  43. (en) Alan Talbot, « P0754R2 - <version> » [PDF],
  44. (en) JF Bastien, « P0476R2 - Bit-casting object representations »,
  45. (en) Ville Voutilainen et Jonathan Wakely, « P0941R2 - Integrating feature-test macros into the C++ WD »,
  46. (en) Antony Polukhin, « P1032R1 - Misc constexpr bits »,
  47. (en) Glen Joseph Fernandes et Peter Dimov, « P1020R1 - Smart pointer creation with default initialization »,
  48. (en) Mikhail Maltsev, « P0458R2 - Checking for Existence of an Element in Associative Containers »,
  49. (en) « P0553R4: Bit operations », www.open-std.org,
  50. (en) Jens Maurer, « P0556R3 - Integral power-of-2 operations »,
  51. (en) Chris Kennelly, « P1355R2 - Exposing a narrow contract for ceil2 »,
  52. (en) Vincent Reverdy, « P1956R1 - On the names of low-level bit manipulation functions »,
  53. (en) Tomasz Kamiński, « P0356R3 - Simplified partial function application »,
  54. (en) « C++ keywords - cppreference.com », en.cppreference.com
  55. (en) Jared Hoberock, « N4793 - C++ Extensions for Parallelism Version 2 » [PDF],
  56. (en) Jonathan Wakely, « N4711 - C++ Extensions for Networking » [PDF],
  57. (en) David Sankel, « N4818 - C++ Extensions for Reflection » [PDF],
  58. (en) Herb Sutter, « Trip report: Summer ISO C++ standards meeting (Cologne) », Sutter's Mill,
  59. (en) Jens Weller, « Reflections on the reflection proposals - Meeting C++ », meetingcpp.com,
  60. (en) Matus Chochlik, Axel Naumann et David Sankel, « P0194R6 - Static reflection »,
  61. (en) Herb Sutter, « P0707R0 - Metaclasses » [PDF],
  62. (en) Jared Hoberock, Michael Garland, Chris Kohlhoff et al., « P0443R10 - A Unified Executors Proposal for C++ »,
  63. (en) Jonathan Wakely, « N4771 - Working Draft, C++ Extensions for Networking »,
  64. (en) « ISO/IEC TS 19216:2018 Programming Languages -- C++ Extensions for Networking »
  65. (en) David Hollman, Chris Kohlhoff, Bryce Lelbach et al., « P1393R0 - A General Property Customization Mechanism »,
  66. (en) Lee Howes, Bryce Adelstein Lelbach, David S. Hollman et Michał Dominiak, « P1054R0 - A Unified Futures Proposal for C++ »,
  67. (en) Corentin Jabot, « P1161R2 - Deprecate uses of the comma operator in subscripting expressions »,
  68. (en) JF Bastien, « P1152R3 - Deprecating volatile »,

Liens externes

 

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.