Dans une question précédente sur Stack Overflow, une expression lambda apparemment simple n'a pas pu être compilée. Cependant, avec l'ajout d'un opérateur ' ' avant le lambda, le code a miraculeusement acquis sa capacité à se compiler. Cette observation intrigante pose la question : pourquoi ' []{}' fonctionne-t-il ?
La clé réside dans le comportement surchargé de l'opérateur ' '. Lorsqu'il est appliqué à un objet de fermeture généré par un lambda non capturant, il invoque une fonction de conversion intégrée qui transforme la fermeture en un simple pointeur de fonction.
Cette conversion est cruciale car l'opérateur ' ' a un candidat surcharge qui convertit n’importe quel type en pointeur. Par conséquent, l'application de ' ' à l'objet de fermeture entraîne un pointeur de fonction vers le lambda.
Le type de 'test' après la déclaration du premier lambda devient void(*)(), qui est un pointeur de fonction avec un type de retour void et aucun paramètre. Cela permet au deuxième lambda d'être affecté à « test », malgré un type de fermeture différent.
Par conséquent, la fonctionnalité du code peut être expliquée comme suit :
Ce comportement est entièrement conforme à la norme C, ce qui fait de ' []{}' une astuce valide et étonnamment utile pour lambda. expressions.
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!