| C++17 | |
| Date de première version | |
|---|---|
| Site web | www.iso.org/standard/68564.html |
| modifier |
|
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.
Cette version de C++ a non seulement ajouté de nouvelles fonctionnalités, mais en a également supprimé quelques-unes.
std::auto_ptr, std::random_shuffle et les anciens adaptateurs de fonction,. 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.register en tant que spécificateur de classe de stockage. Ce mot-clé reste réservé.static_assert est facultatif.typename (comme alternative à class) pour les paramètres de template template.auto,.namespace X::Y { … } au lieu de namespace X { namespace Y { … } },.[[fallthrough]], [[maybe_unused]] et [[nodiscard]].u8) (les chaines littérales UTF-8 existent depuis C++11).auto pour les non-type template parameter.if statique évalué à la compilation : if constexpr(expression).auto [a, b] = getTwoReturnValues();.if et switch.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).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).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.__cplusplus est changée en 201703L.*this par valeur.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.std::optional : représentation d'objets facultatifs.std::any pour contenir des valeurs uniques de tout type.std::uncaught_exceptions en remplacement de std::uncaught_exception< dans la gestion des exceptions.try_emplace et insert_or_assign pour les structures de données associatives std::map et std::unordered_map.std::size, std::empty et std::data.boost::filesystem.std::variant : un type somme.std::byte : type représentant un multiplet de données comme un multiplet plutôt qu'un caractère.std::conjunction, std::disjunction et std::negation.