Maison > développement back-end > C++ > Quelles sont les principales nouvelles fonctionnalités et améliorations introduites dans C 17 ?

Quelles sont les principales nouvelles fonctionnalités et améliorations introduites dans C 17 ?

Barbara Streisand
Libérer: 2024-12-11 17:17:11
original
758 Les gens l'ont consulté

What are the Key New Features and Enhancements Introduced in C  17?

Quelles sont les nouvelles fonctionnalités de C 17 ?

C 17 introduit une gamme de nouvelles fonctionnalités et d'améliorations du langage, notamment :

  • Langue Caractéristiques :

    • Déduction d'arguments de modèle pour les modèles de classe
    • modèle pour représenter les valeurs de tout type d'argument de modèle non-type
    • Corrections des arguments de modèle non-type
    • Prise en charge des modèles de modèle
    • Pliage étendu et ... expressions
    • auto x{8} sous forme d'entier
    • Modernisation en utilisant avec ... et lists
    • Constexpr lambdas
    • Capturer cela dans lambdas
    • Attributs tels que [[fallthrough]], [[nodiscard]], [[maybe_unused]]
    • Attributs sur les espaces de noms et les énumérateurs
    • Utilisation dans les attributs pour éviter de répéter les espaces de noms d'attributs
    • Exiger des compilateurs qu'ils ignorent les attributs non standard qu'ils ne reconnaissent pas
    • Variables en ligne
    • Alias ​​d'espace de noms (par exemple, espace de noms A::B)
    • Simple static_assert(expression); sans chaîne
    • Éliminer no throw et le remplacer par throw() et nosauf(true)
  • Nettoyeur multi-retour et contrôle de flux :

    • Liaisons structurées pour simplifier les multi-retours valeurs
    • if (init; condition) et switch (init; condition) pour les instructions étendues if et switch
    • Généralisation des boucles for basées sur une plage pour les sentinelles et les itérateurs personnalisés
    • if constexpr pour presque générique code
  • Divers :

    • Littéraux hexadécimaux à virgule flottante
    • Allocation dynamique de mémoire pour les data
    • Copie garantie élision
    • Ordre d'évaluation fixe pour les expressions
    • Initialisation directe de la liste des énumérations
    • Garanties de progression anticipée (FPG)
    • Littéraux de caractères u8'U ', u8'T', u8'F', u8'8'
    • nosauf dans le système de types
    • __has_include pour tester les erreurs d'inclusion du fichier d'en-tête
    • Tableaux de correctifs de conversion de pointeur
    • Corrections des constructeurs hérités et initialisation agrégée avec héritage
    • Fonctions utilitaires pour le type std jeux de mots
  • Ajouts à la bibliothèque :

    • Types de données :

      • std :: variante pour l'union taguée types
      • std::facultatif pour les valeurs nullables
      • std::any pour tout type de valeur
      • std::string_view comme référence à un tableau de caractères ou une sous-chaîne
      • std::byte comme ni un entier ni un caractère, mais juste données
    • Invoquer des éléments :

      • std::invoke pour l'appel de fonction générique
      • std::apply pour décompresser les tuples en appels de fonction
      • std::make_from_tuple et std::apply pour la construction d'objets
      • is_invocable, is_invocable_r et Ensure_result pour l'invocation de fonction fonctionnalité
    • Système de fichiers TS v1 : opérations améliorées du système de fichiers
    • Nouveaux algorithmes : for_each_n, réduire, transformer_reduce, exclusive_scan , inclusive_scan, transform_exclusive_scan et transform_inclusive_scan
    • Threading : std::shared_mutex, atomic::is_always_lockfree et scoped_lock
    • Parallélisme TS v1 : Versions parallèles d'algorithmes et machines associées
    • Principes fondamentaux de la bibliothèque TS v1 :Algorithmes de recherche, allocateur polymorphe (pmr), échantillonnage
    • Améliorations des conteneurs : try_emplace et insert_or_assign, épissage pour cartes et ensembles, non const .data() pour les chaînes, non membres std::size, std::empty, std::data, prise en charge minimale des types incomplets dans les conteneurs, "concept" d'itérateur contigu, itérateurs constexpr, constructeurs mis à jour pour la famille de fonctions emplace
    • Modifications du pointeur intelligent : Corrections de unique_ptr et ajustements de faible_from_this et partagés depuis this
    • Autres améliorations du type de données std : Construction de std::tuple avec accolades, reference_wrapper trivialement copiable
    • Divers :

      • La bibliothèque C 17 est basée sur C11 au lieu de C99
      • Std[0-9] réservé pour les futures bibliothèques standard
      • Fonctions utilitaires telles que destroy, uninitialized_move, uninitialized_value_construct et uninitialized_default_construct
      • Fonctions mathématiques spéciales
      • std::clamp()
      • PGCD et calculs LCM
      • std::uncaught_exceptions pour le lancement dans les destructeurs
      • std::as_const et std::bool_constant types
      • std::void_t et std::void_t types
      • std::owner_less pour que les pointeurs intelligents trient en fonction du contenu
      • Améliorations de std::chrono
      • std::conjunction, std::disjunction, std::negation
      • std::not_fn
      • Règles pour non sauf à l'intérieur std
      • std::is_contiguous_layout
      • Conversion de nombres haute performance avec std::to_chars et std::from_chars
  • Traits :

    • échange, is_aggregate, has_unique_object_representations

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal