Retour par référence Rvalue : est-ce plus efficace ?
Le retour d'un objet par référence rvalue n'est pas toujours plus efficace que le retour par lvalue référence. Cela peut conduire à des références pendantes si l'objet renvoyé est un objet temporaire qui est détruit après le retour de la fonction.
Le code d'origine :
L'extrait de code fourni tente de revenir une référence rvalue déplacée vers un objet Beta_ab temporaire :
Beta_ab&& Beta::toAB() const { return move(Beta_ab(1, 1)); }
Ceci n'est pas recommandé car il renvoie une référence pendante. Pour déplacer correctement un temporaire dans la valeur de retour, la fonction doit renvoyer une valeur plutôt qu'une référence rvalue :
Beta_ab Beta::toAB() const { return Beta_ab(1, 1); }
Utilisation des références Rvalue avec d'autres fonctions :
Renvoyer une référence rvalue peut être bénéfique dans certaines situations. Par exemple, s'il existe une fonction getAB() qui est fréquemment appelée sur des objets temporaires, il peut être plus efficace de renvoyer une référence rvalue :
struct Beta { Beta_ab ab; Beta_ab const& getAB() const& { return ab; } Beta_ab &&getAB() && { return move(ab); } };
Dans cet exemple, move est nécessaire car ab n'est pas une valeur locale automatique ou temporaire. Le qualificatif ref && garantit que la deuxième fonction getAB() est invoquée sur les valeurs temporaires rvalue, ce qui entraîne un déplacement au lieu d'une copie.
Conclusion :
Lors du retour par référence rvalue peut être efficace dans certains cas, elle doit être utilisée avec prudence pour éviter les références pendantes. Renvoyer une valeur est généralement préféré pour les fonctions qui renvoient des objets temporaires.
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!