La fonction est bien formée (syntaxiquement correcte), mais dès que la fonction revient, la référence renvoyée est invalide et ne peut plus être utilisée.
Pour clarifier: le code en question ne pas invoquer tout comportement indéfini. Vous pouvez appeler en toute sécurité cette fonction aussi longtemps que vous n'utilisez pas la valeur de retour, par exemple, ceci est valable:
test_function(); // ok
Cependant, si vous essayez d'utiliser la valeur de retour (c.-à-initialiser une autre référence avec ou copie le référent dans un autre objet), alors vous invoquera un comportement non défini, car la durée de vie du référent (l'objet x
) aura terminé (x
sera détruit lorsque la fonction retourne, car il est une variable automatique):
std::vector<int>& vec = test_function(); // undefined
std::vector<int> vec = test_function(); // undefined
Merde, bat moi moi! – Anthony
Le code affiché ne contient pas (à lui seul) de comportement indéfini. L'UB arriverait dans un autre code qui appelle cette fonction. –