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
Barbara Streisandoriginal
2024-12-11 17:17:11665parcourir

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:
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