Maison > développement back-end > C++ > Devrions-nous encore transmettre `std::string` et `std::vector` par `const &` ?

Devrions-nous encore transmettre `std::string` et `std::vector` par `const &` ?

Barbara Streisand
Libérer: 2024-12-10 13:54:11
original
1015 Les gens l'ont consulté

Should We Still Pass `std::string` and `std::vector` by `const &`?

Révision des conventions de transmission de paramètres pour l'optimisation

Dans une récente conférence, Herb Sutter a suggéré que la transmission des objets std::vector et std::string par const & devient obsolète. Cette affirmation a suscité des discussions parmi les programmeurs.

Raison d'être de Sutter

Sutter soutient que dans les cas où la fonction renvoie une valeur r (c'est-à-dire un objet temporaire), transmettre l'entrée le paramètre par valeur permet une gestion plus efficace à l’aide de la sémantique de déplacement. Cela évite les copies ou allocations de mémoire inutiles.

Considérez l'extrait de code suivant :

std::string do_something ( std::string inval )
{
   std::string return_val;
   // ... do stuff ...
   return return_val;
}
Copier après la connexion

Passer inval par valeur permet à la fonction de modifier et de renvoyer directement la valeur, éliminant ainsi le besoin d'une copie. constructeur.

Préoccupations concernant Efficacité

Les critiques affirment que transmettre des objets volumineux comme std::string par valeur peut toujours être inefficace en raison de la surcharge liée au déplacement de l'objet. Une instance std::string se compose de plusieurs composants, dont un pointeur de tas et un membre char[] pour l'optimisation des chaînes courtes.

Arguments pour les paramètres de référence

Malgré le inefficacités potentielles, les partisans des paramètres de référence soutiennent qu'ils offrent plusieurs avantages :

  • Encapsulation :Les fonctions qui prennent des références indiquent clairement qu'elles ne modifient pas l'objet d'origine.
  • Complexité réduite : Les paramètres de référence simplifient le code en éliminant le besoin de prendre en compte la propriété et la durée de vie gestion.

Conclusion

Le choix de transmettre les objets par const & ou par valeur dépend du cas d'utilisation spécifique. Dans les situations où l'efficacité est critique et où la fonction fonctionne sur des rvalues, le passage de valeur avec la sémantique de déplacement peut offrir des avantages en termes de performances. Cependant, dans les cas où l'encapsulation, la simplicité ou la gestion de la propriété sont importantes, les paramètres de référence restent précieux.

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