Maison > développement back-end > C++ > Comment les Lambdas génériques C 14 obtiennent-ils une flexibilité de type à l'aide du mot-clé « auto » ?

Comment les Lambdas génériques C 14 obtiennent-ils une flexibilité de type à l'aide du mot-clé « auto » ?

Patricia Arquette
Libérer: 2024-12-16 16:36:17
original
824 Les gens l'ont consulté

How Do C  14 Generic Lambdas Achieve Type Flexibility Using the `auto` Keyword?

Comprendre les Lambdas génériques en C 14, variante du mot-clé automatique

En C 14, les lambdas génériques, un type d'expression lambda avec un mot-clé automatique comme un type d'argument, offrent une flexibilité accrue. Contrairement aux lambdas C 11 avec un opérateur d'appel sans modèle, les lambdas génériques ont un opérateur d'appel basé sur un modèle dans le type de fermeture qu'ils définissent.

Par exemple, le code suivant démontre un lambda générique :

auto glambda = [](auto a) { return a; };
Copier après la connexion

Dans ce cas, le type de fermeture du glambda sera défini comme :

class /* unnamed */
{
public:
    template<typename T>
    T operator () (T a) const { return a; }
};
Copier après la connexion

Cela signifie que glambda est une instance d'un foncteur unique et sans nom avec un opérateur d'appel basé sur un modèle. Chaque occurrence de auto dans la déclaration de paramètre du lambda correspond à un paramètre de modèle de type inventé, permettant à l'opérateur d'appel de gérer des arguments de types différents.

La norme C 14 (n3690) précise que l'opérateur d'appel de type fermeture pour un lambda générique, il a une liste de paramètres de modèle avec un paramètre de modèle de type inventé pour chaque auto dans la clause de déclaration de paramètre du lambda. Le type de retour et les paramètres de fonction sont dérivés du type de retour final et de la clause de déclaration de paramètre du lambda, avec remplacement automatique par le nom du paramètre de modèle inventé correspondant.

En résumé, les lambdas génériques en C 14 représentent des foncteurs uniques et sans nom avec des opérateurs d'appel modélisés. Cela diffère du polymorphisme basé sur un modèle C, dans lequel le compilateur génère de nouvelles fonctions avec des types remplacés pour chaque type d'argument. Il est plus étroitement aligné sur les génériques de Java, qui impliquent l'effacement de type lors de la compilation.

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