Maison > développement back-end > C++ > Le retour par référence Rvalue est-il toujours plus efficace que le retour par référence Lvalue ?

Le retour par référence Rvalue est-il toujours plus efficace que le retour par référence Lvalue ?

Barbara Streisand
Libérer: 2024-12-24 00:15:10
original
133 Les gens l'ont consulté

Is Returning by Rvalue Reference Always More Efficient Than Returning by Lvalue Reference?

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));
}
Copier après la connexion

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);
}
Copier après la connexion

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); }
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal