Top Qs
Chronologie
Chat
Contexte
C++17
langage de programmation De Wikipédia, l'encyclopédie libre
Remove ads
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.
Remove ads
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_shuffleet 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::bindet lambdas. - Suppression de l'utilisation (anciennement obsolète) du mot clé
registeren tant que spécificateur de classe de stockage[5]. Ce mot-clé reste réservé.
Remove ads
Nouvelles fonctionnalités
Langage
- Le message de
static_assertest facultatif[6]. - Utilisation possible de
typename(comme alternative àclass) pour les paramètres 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].
- 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
autopour les non-type template parameter[16]. - Évaluation constante des arguments des non-type template parameter[17].
- fold expression pour les variadic template[18].
ifstatique évalué à la compilation :if constexpr(expression)[19].- Déclarations structured binding :
auto [a, b] = getTwoReturnValues();[20]. - Initialiseurs dans les instructions
ifetswitch[21]. - L'initialisation par copie et l'initialisation directe d'objets de type
Tpartir deprvaluede 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 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 constructeurstd::pair<double, bool>(5.0, false)ou une fonction de construction intermédiairestd::make_pair(5.0, false). - Variables
inlinepermettant 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_includepermettant de vérifier la disponibilité d'un en-tête par les directives du préprocesseur[24].- La valeur de
__cplusplusest changée en201703L[25]. - Les spécifications d'exception ont été intégrées à la signature des fonctions[26].
- Les expressions lambda peuvent capturer
*thispar valeur[27].
Bibliothèque
- La majorité de Library Fundamentals V1 TS, y compris [28] :
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[29].std::optional: représentation d'objets facultatifs.std::anypour contenir des valeurs uniques de tout type.
std::uncaught_exceptionsen remplacement destd::uncaught_exception<dans la gestion des exceptions[30].- Nouvelles fonctions d'insertion
try_emplaceetinsert_or_assignpour les structures de données associativesstd::mapetstd::unordered_map[31]. - Fonctions libres d'accès uniforme au conteneur
std::size,std::emptyetstd::data[32]. - Définition des « itérateurs contigus »[33].
- Bibliothèque de système de fichiers basée sur
boost::filesystem[34]. - Versions parallèles de plusieurs algorithmes STL[35].
- Fonctions spéciales mathématiques supplémentaires, y compris les intégrales elliptiques et les fonctions de Bessel[36].
std::variant: un type somme[37].std::byte: type représentant un multiplet de données comme un multiplet plutôt qu'un caractère[38].- Traits modélisant les opérateurs logiques :
std::conjunction,std::disjunctionetstd::negation[39].
Remove ads
Références
Liens externes
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads