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