Accueil🇫🇷Chercher

C++17

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.

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

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

Suppression

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

Langage

  • Le message de static_assert​ est facultatif[6].
  • Utilisation possible de typename​ (comme alternative Ă  class​) pour les paramètres de template template​[7].
  • Nouvelles règles de dĂ©duction des braced-init-list avec auto​[8] - [3].
  • DĂ©finitions d'espace de noms imbriquĂ©es : namespace X::Y { … }​ au lieu de namespace X { namespace Y { … } }​[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 : if constexpr(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

Références

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

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