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 » ?
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; };
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; } };
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!