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.
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 trigraphes[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 questd::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ètre detemplate 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 denamespace X { namespace Y { … } }
[3],[9]. - Utilisation d'attributs sur les espaces de noms et les énumérateurs [10],[11].
- Nouveaux attributs standard
[[fallthrough]]
,[[maybe_unused]]
et[[nodiscard]]
[12]. - Caractères littéraux UTF-8 (
u8
) [10],[13] (les chaines littérales UTF-8 existent depuis C++11). - Littéraux hexadécimaux à virgule flottante [14],[15].
- Utilisation de
auto
pour les non-type template parameter [16]. - Évaluation constante des arguments des non-type template parameter [10],[17].
- fold expression pour les variadic template [10],[18].
if
statique évalué à la compilation :if constexpr(expression)
[15].- Déclarations structured binding :
auto [a, b] = getTwoReturnValues();
[15]. - Initialiseurs dans les instructions
if
etswitch
[19]. - L'initialisation par copie et l'initialisation directe d'objets de type
T
partir deprvalue
de typeT
(en ignorant les qualificatifs cv) n'entraîne l'appel d'aucun constructeur de copie ni de déplacement à partir de l'expressionprvalue
(élision de copie). - Déduction des arguments des classes templates disponiblespour les constructeurs[20],[21]. Autorisant l'écriture
std::pair(5.0, false)
au lieu d'exiger la fourniture explicite des types des arguments du constructeurstd::pair<double, bool>(5.0, false)
ou une fonction de construction intermédiairestd::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 fonctionsinline
). __has_include
permettant de vérifier la disponibilité d'un en-tête par les directives du préprocesseur [22].- La valeur de
__cplusplus
est changée en201703L
[15]. - Les spécifications d'exception ont été intégrées à la signature des fonctions [23].
- Les expressions lambda peuvent capturer
*this
par valeur [24].
Bibliothèque
- La majorité de Library Fundamentals V1 TS, y compris [25],[26]:
std::string_view
: référence non propriétaire en lecture seule sur une séquence de caractères ou une sous-chaîne de caractères [27].std::optional
: représentation d'objets facultatifs.std::any
pour contenir des valeurs uniques de tout type.
std::uncaught_exceptions
en remplacement destd::uncaught_exception<
dans la gestion des exceptions [28],[10].- Nouvelles fonctions d'insertion
try_emplace
etinsert_or_assign
pour les structures de données associativesstd::map
etstd::unordered_map
[29],[30]. - Fonctions libres d'accès uniforme au conteneur
std::size
,std::empty
etstd::data
[30],[31]. - Définition des « itérateurs contigus » [30],[32].
- Bibliothèque de système de fichiers basée sur
boost::filesystem
[33]. - Versions parallèles de plusieurs algorithmes STL [34].
- Fonctions spéciales mathématiques supplémentaires, y compris les intégrales elliptiques et les fonctions de Bessel [35].
std::variant
: un type somme [15].std::byte
: type représentant un multiplet de données comme un multiplet plutôt qu'un caractère [36].- Traits modélisant les opérateurs logiques :
std::conjunction
,std::disjunction
etstd::negation
[15].
Références
- « N3981: Removing trigraphs??! (Richard Smith) »,
- IBM comment on preparing for a Trigraph-adverse future in C++17, IBM paper N4210, 2014-10-10. Authors: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis
- « Updates to my trip report »
- « N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej) »
- « C++ Keywords: register »
- « N3928: Extending static_assert, v2 (Walter E. Brown) »
- « N4051: Allow typename in a template template parameter (Richard Smith) »
- « N3922: New Rules for auto deduction from braced-init-list (James Dennett) »
- « N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos) »
- « New core language papers adopted for C++17 »
- « N4266: Attributes for namespaces and enumerators (Richard Smith) »
- « N4640: Working Draft, Standard for Programming Language C++ », p. 193–195
- « N4267: Adding u8 character literals (Richard Smith) »
- Thomas Köppe, « Hexadecimal floating literals for C++ »
- « N4659: Working Draft, Standard for Programming Language C++ »
- James Touton et Mike Spertus, « Declaring non-type template parameters with auto »,
- « N4268: Allow constant evaluation for all non-type template arguments (Richard Smith) »
- « N4295: Folding expressions (Andrew Sutton, Richard Smith) »
- « Selection statements with initializer »
- « Class template argument deduction »
- « CppCon 2018: Timur Doumler “Class template argument deduction in C++17” »
- « N4640: Working Draft, Standard for Programming Language C++ », p. 431–433
- « P0012R1: Make exception specifications be part of the type system, version 5 »
- « P0018R3: Lambda Capture of *this by Value as [=,*this], version 3 »
- « Adopt Library Fundamentals V1 TS Components for C++17 (R1) »
- « Current Status »
- « std::basic_string_view - cppreference.com », en.cppreference.com (consulté le )
- « N4259: Wording for std::uncaught_exceptions (Herb Sutter) »
- « N4279: Improved insertion interface for unique-key maps (Thomas Köppe) »
- « New standard library papers adopted for C++17 »
- « N4280: Non-member size() and more (Riccardo Marcangelo) »
- « N4284: Contiguous Iterators (Jens Maurer) »
- « Filesystem Library Proposal (Beman Dawes) »
- « The Parallelism TS Should be Standardized »
- « Mathematical Special Functions for C++17, v5 »
- « A byte type definition »
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.