Dans le domaine du codage C, le comportement de l'opérateur ' ' appliqué à un lambda (' []{}') a suscité la curiosité. Bien que le code semble non conventionnel, il est étonnamment compilé avec succès avec les principaux compilateurs. Mais comment fonctionne cette exception à la norme ?
La clé pour comprendre ce comportement réside dans les surcharges de l'opérateur ' '. Lorsqu'il est appliqué au lambda, « » déclenche une conversion en un ancien pointeur de fonction. Ceci est possible car le lambda en question est non capturant, ce qui signifie qu'il ne fait référence à aucune variable externe.
Selon le standard C (section 5.1.2), un objet de fermeture lambda non capturant a une fonction de conversion publique non virtuelle qui renvoie un pointeur de fonction. Ce pointeur pointe vers une fonction qui a le même comportement que le lambda.
L'opérateur ' ' a une surcharge intégrée qui convertit n'importe quel type en pointeur . Dans le cas du lambda, la fonction de conversion mentionnée précédemment est sélectionnée comme surcharge candidate. Le résultat est un pointeur de fonction du même paramètre et des mêmes types de retour que l'opérateur d'appel de fonction du lambda.
Ainsi, lorsque ' ' est appliqué au premier lambda, il convertit l'objet de fermeture lambda en un pointeur de fonction. Cela permet d'attribuer le deuxième objet de fermeture lambda au même pointeur de fonction, puisque les deux lambdas ont des types compatibles.
Oui, le code utilisant '[]{}' est conforme aux normes. Le standard C permet la conversion d'objets de fermeture lambda non capturants en pointeurs de fonction. Ce comportement permet des astuces de codage surprenantes mais valables.
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!