Maison >développement back-end >C++ >Pourquoi renvoyer une référence à une variable locale semble-t-il parfois fonctionner ?
Renvoi d'une référence à une variable locale ou temporaire
Dans l'extrait de code fourni, une fonction foo() renvoie une référence à une variable locale i . Malgré la violation apparente du renvoi d'une référence à une variable qui n'existe plus sur la pile, le code attribue effectivement la valeur 6 à la variable i dans la fonction main().
Cela est dû à une bizarrerie dans la gestion mémoire des appels de fonctions. Lorsqu'une fonction est invoquée, un cadre de pile est alloué pour stocker les variables locales de la fonction. Cependant, même après le retour de la fonction, le cadre de pile reste alloué pendant une brève période tandis que le cadre de pile de l'appelant de la fonction est toujours actif.
Pendant ce temps, les références aux variables locales dans la fonction renvoyée pointent toujours vers leur emplacements de mémoire d'origine sur la pile. Cela permet d'utiliser la référence renvoyée pour accéder et modifier la variable correspondante dans la portée de l'appelant.
Cependant, il est crucial de noter que ce comportement est hautement imprévisible et spécifique à l'implémentation. Cela peut varier en fonction du compilateur, des paramètres d'optimisation et de l'environnement d'exécution. Ainsi, s'appuyer sur ce comportement n'est généralement pas conseillé et n'est pas considéré comme une bonne pratique de programmation.
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!