Capturer une référence par référence en C 11 Lambdas
La question :
Considérez le extrait de code suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Pouvons-nous garantir que ce programme en produira 5 sans rencontrer de comportement indéfini ? Cette question se pose spécifiquement lors de la capture de la variable x par référence ([&]) et concerne la question de savoir si la capture d'une référence à une variable entraînera une référence suspendue une fois la fonction make_function renvoyée.
La réponse :
Oui, le code est garanti de fonctionner.
Explication :
La spécification lambda C 11 indique que la référence capturée ici reste valide tant que l'objet initialement référencé existe toujours. Cela signifie que même si le paramètre x dans make_function devient hors de portée après le retour de la fonction, la fermeture lambda conserve toujours une référence valide à l'entier i.
Clarification :
Pour corriger certaines inexactitudes dans les réponses précédentes :
Dans ce cas spécifique, la variable x est dans la portée du lambda et est capturé par référence. Par conséquent, la référence reste valide, et le lambda peut continuer à accéder à la valeur modifiée de i.
Conclusion :
Ce code démontre la capture correcte d'une référence par référence dans un lambda. Il est garanti de produire 5 sans invoquer un comportement indéfini.
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!