Maison > développement back-end > C++ > Comment le mot-clé « auto » de C 17 simplifie-t-il la déduction des paramètres de modèle ?

Comment le mot-clé « auto » de C 17 simplifie-t-il la déduction des paramètres de modèle ?

Barbara Streisand
Libérer: 2024-12-04 13:47:10
original
509 Les gens l'ont consulté

How Does C  17's `auto` Keyword Simplify Template Parameter Deduction?

Avantages de la déduction automatique des paramètres de modèle en C 17

C 17 introduit l'option mot-clé dans les paramètres du modèle, un ajout important qui offre de nombreux avantages.

Extension naturelle de auto pour l'instanciation de modèle

Similaire au mot-clé auto utilisé pour la déclaration de variable, < automatique> dans les paramètres du modèle permet de déduire le type des paramètres non-types au moment de l'instanciation. Cela élimine le besoin de spécifier explicitement le type de paramètre, comme le montre l'exemple ci-dessous :

auto v1 = constant<5>;      // v1 == 5, decltype(v1) is int
auto v2 = constant<true>;   // v2 == true, decltype(v2) is bool
auto v3 = constant<'a'>;    // v3 == 'a', decltype(v3) is char
Copier après la connexion

Confort amélioré

Remplacement des déclarations de type explicites par simplifie considérablement le code du modèle, le rendant plus lisible et maintenable. Considérons le code suivant :

template <typename Type, Type value> constexpr Type constant = value;
constexpr auto const IntConstant42 = constant<int, 42>;
Copier après la connexion

Ce code peut être réécrit avec comme suit :

template <auto value> constexpr auto constant = value;
constexpr auto const IntConstant42 = constant<42>;
Copier après la connexion

Concision du code améliorée

est particulièrement utile lorsque vous travaillez avec des paramètres de modèle variadiques. Par exemple, la création d'une liste de valeurs constantes au moment de la compilation devient plus concise et simple :

template <auto ... vs> struct HeterogenousValueList {};
using MyList1 = HeterogenousValueList<42, 'X', 13u>;

template <auto v0, decltype(v0) ... vs> struct HomogenousValueList {};
using MyList2 = HomogenousValueList<1, 2, 3>;
Copier après la connexion

En comparaison, obtenir la même fonctionnalité dans la version antérieure à C 17 nécessiterait des constructions plus verbeuses et alambiquées impliquant des modèles supplémentaires.

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!

source:php.cn
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