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.

Faits en bref Date de première version, Site web ...

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_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é.
Remove ads

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

Remove ads

Références

Liens externes

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads