En C 14, l'introduction des lambdas génériques a apporté une nouvelle dimension de flexibilité dans le code. Ils utilisent la puissance de auto comme type d'argument, mais leur mécanisme est-il ancré dans des modèles C ou dans un effacement de type de type Java ?
Les lambdas génériques exploitent les modèles C pour définir un type de fermeture qui possède un opérateur d'appel modélisé. Cela diffère de l'opérateur d'appel non basé sur un modèle dans les lambdas C 11. Prenons l'exemple :
auto glambda = [](auto a) { return a; };
Ici, le type de fermeture de glambda est défini comme suit :
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
Partage lambdas générique similitudes avec les modèles C, où le compilateur génère des fonctions distinctes pour différents types d'arguments. Cependant, il existe une différence cruciale : les lambdas génériques ne créent pas plusieurs instances de fonction au moment de la compilation. Au lieu de cela, ils utilisent un seul foncteur sans nom qui définit un opérateur d'appel modélisé.
Contrairement aux génériques Java, qui utilisent l'effacement de type, les lambdas génériques préservent les informations de type. Les paramètres du modèle de type dans l'opérateur d'appel permettent au lambda de déduire et de manipuler les types d'arguments réels au moment de l'exécution.
Les lambdas génériques en C 14 sont un outil puissant pour écrire du code concis et flexible. . Bien qu'ils s'inspirent des modèles C, leur mécanisme est nettement différent, offrant un mélange unique de comportement à la compilation et à l'exécution.
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!