Maison >développement back-end >C++ >Comment l'opérateur « » fonctionne-t-il avec un Lambda sans capture en C ?

Comment l'opérateur « » fonctionne-t-il avec un Lambda sans capture en C ?

DDD
DDDoriginal
2024-12-22 18:21:14349parcourir

How Does the ' ' Operator Work with a Non-Capturing Lambda in C  ?

Un Lambda positif : '[]{}' - Les secrets dévoilés

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 conversion en pointeur de fonction

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.

Les surcharges d'opérateur intégrées

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.

Conformité standard

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!

Déclaration:
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