VOOZH about

URL: https://fr.wikipedia.org/wiki/C++17

⇱ C++17 — Wikipédia


Aller au contenu
Un article de Wikipédia, l'encyclopédie libre.
C++17
Date de première version 👁 Voir et modifier les données sur Wikidata
Site web www.iso.org/standard/68564.html👁 Voir et modifier les données sur Wikidata
modifier👁 Image

C++17, anciennement connu sous le nom de C++1z, est une norme pour le langage de programmation C++. Elle a été publiée en sous le nom de ISO/CEI 14882:2017.

Le dernier working draft gratuit est le N4659, qui date du , les seules différences avec le standard étant des corrections éditoriales.

Suppression

[modifier | modifier le code]

Cette version de C++ a non seulement ajouté de nouvelles fonctionnalités, mais en a également supprimé quelques-unes.

  • Suppression des trigrammes[1],[2].
  • Suppression de certains types et fonctions obsolètes de la bibliothèque standard, notamment std::auto_ptr, std::random_shuffle et les anciens adaptateurs de fonction[3],[4]. Celles-ci ont été remplacées dans C++11 par des fonctionnalités améliorées telles que std::unique_ptr, std::shuffle, std::bind et lambdas.
  • Suppression de l'utilisation (anciennement obsolète) du mot clé register en tant que spécificateur de classe de stockage[5]. Ce mot-clé reste réservé.

Nouvelles fonctionnalités

[modifier | modifier le code]
  • Le message de static_assert est facultatif[6].
  • Utilisation possible de typename (comme alternative à class) pour les paramètres de templatetemplate[7].
  • Nouvelles règles de déduction des braced-init-list avec auto[8],[3].
  • Définitions d'espace de noms imbriquées: namespaceX::Y{} au lieu de namespaceX{namespaceY{}}[3],[9].
  • Utilisation d'attributs sur les espaces de noms et les énumérateurs[10].
  • Nouveaux attributs standards [[fallthrough]][11], [[maybe_unused]][12] et [[nodiscard]][13].
  • Caractères littéraux UTF-8 (u8)[14] (les chaines littérales UTF-8 existent depuis C++11).
  • Littéraux hexadécimaux à virgule flottante[15].
  • Utilisation de auto pour les non-type template parameter[16].
  • Évaluation constante des arguments des non-type template parameter[17].
  • fold expression pour les variadic template[18].
  • if statique évalué à la compilation: ifconstexpr(expression)[19].
  • Déclarations structured binding: auto[a,b]=getTwoReturnValues();[20].
  • Initialiseurs dans les instructions if et switch[21].
  • L'initialisation par copie et l'initialisation directe d'objets de type T partir de prvalue de type T (en ignorant les qualificatifs cv) n'entraîne l'appel d'aucun constructeur de copie ni de déplacement à partir de l'expression prvalue (élision de copie).
  • Déduction des arguments des classes templates disponibles pour les constructeurs[22],[23]. Autorisant l'écriture std::pair(5.0,false) au lieu d'exiger la fourniture explicite des types des arguments du constructeur std::pair<double,bool>(5.0,false) ou une fonction de construction intermédiaire std::make_pair(5.0,false).
  • Variables inline permettant la définition de variables dans les fichiers d'en-tête sans enfreindre la règle de définition unique (les règles sont similaires à celle des fonctions inline).
  • __has_include permettant de vérifier la disponibilité d'un en-tête par les directives du préprocesseur[24].
  • La valeur de __cplusplus est changée en 201703L[25].
  • Les spécifications d'exception ont été intégrées à la signature des fonctions[26].
  • Les expressions lambda peuvent capturer *this par valeur[27].

Bibliothèque

[modifier | modifier le code]

Références

[modifier | modifier le code]
  1. (en) Richard Smith, «N3981 - Removing trigraphs??!»,
  2. (en) Michael Wong, Hubert Tong, Rajan Bhakta et Derek Inglis, «N4210 - IBM comment on preparing for a Trigraph-adverse future in C++17» [PDF],
  3. 1 2 3 (en) Herb Sutter, «Updates to my trip report»,
  4. (en) Stephan T. Lavavej, «N4190 - Removing auto_ptr, random_shuffle(), And Old <functional> Stuff»,
  5. (en) Alisdair Meredith, «P0001R1 - Remove Deprecated Use of the register Keyword»,
  6. (en) Walter E. Brown, «N3928 - Extending static_assert, v2» [PDF],
  7. (en) Richard Smith, «N4051 - Allow typename in a template template parameter»,
  8. (en) James Dennett, «N3922 - New Rules for auto deduction from braced-init-list»,
  9. (en) Robert Kawulak et Andrew Tomazos, «N4230 - Nested namespace definition»,
  10. (en) Richard Smith, «N4266 - Attributes for namespaces and enumerators»,
  11. (en) Andrew Tomazos, «P0188R1 - Wording for [[fallthrough]] attribute» [PDF],
  12. (en) Andrew Tomazos, «P0212R1 - Wording for [[maybe_unused]] attribute» [PDF],
  13. (en) Andrew Tomazos, «P0189R0 - Wording for [[nodiscard]] attribute» [PDF],
  14. (en) Richard Smith, «N4267 - Adding u8 character literals»,
  15. (en) Thomas Köppe, «P00245R1 - Hexadecimal floating literals for C++»,
  16. (en) James Touton et Mike Spertus, «P0127R2 - Declaring non-type template parameters with auto»,
  17. (en) Richard Smith, «N4268 - Allow constant evaluation for all non-type template arguments»,
  18. (en) Andrew Sutton et Richard Smith, «N4295 - Folding expressions»,
  19. (en) Jens Maurer, «P0292R2 - constexpr if: A slightly different syntax»,
  20. (en) Jens Maurer, «P0217R3 - Proposed wording for structured bindings»,
  21. (en) Thomas Köppe, «P0305R1 - Selection statements with initializer»,
  22. (en) Mike Spertus, Faisal Vali et Richard Smith, «P0091R3 - Template argument deduction for class templates»,
  23. (en) «CppCon 2018: Timur Doumler “Class template argument deduction in C++17”»
  24. (en) Clark Nelson et Richard Smith, «P0061R1 - __has_include for C++17»,
  25. (en) «N4659 - Working Draft, Standard for Programming Language C++» [PDF]
  26. (en) Jens Maurer, «P0012R1 - Make exception specifications be part of the type system, version 5»,
  27. (en) H. Carter Edwards, Daveed Vandevoorde, Christian Trott et al., «P0018R3 - Lambda Capture of *this by Value as [=,*this]»,
  28. (en) Beman Dawes et Alisdair Meredith, «P0220R1 - Adopt Library Fundamentals V1 TS Components for C++17 (R1)»,
  29. (en) Jeffrey Yasskin, «N3921 - string_view: a non-owning reference to a string»,
  30. (en) Herb Sutter, «N4259 - Wording for std::uncaught_exceptions» [PDF],
  31. (en) Thomas Köppe, «N4279 - Improved insertion interface for unique-key maps»,
  32. (en) Riccardo Marcangelo, «N4280 - Non-member size() and more» [PDF],
  33. (en) Jens Maurer, «N4284 - Contiguous Iterators»,
  34. (en) Beman Dawes, «N3505 - Filesystem Library Proposal»,
  35. (en) Jared Hoberock, «P0024R2 - The Parallelism TS Should be Standardized»,
  36. (en) Walter E. Brown, Axel Naumann et Edward Smith-Rowland, «P0226R1 - Mathematical Special Functions for C++17» [PDF],
  37. (en) Axel Naumann, «P0088R3 - Variant: a type-safe union for C++17»,
  38. (en) Neil MacIntosh, «P0298R3 - A byte type definition» [PDF],
  39. (en) Jonathan Wakely, «P0013R1 - Logical Operator Type Traits»,

Liens externes

[modifier | modifier le code]