Maison > développement back-end > C++ > Devrions-nous toujours transmettre la référence `std::string` par `const std::string&` ?

Devrions-nous toujours transmettre la référence `std::string` par `const std::string&` ?

DDD
Libérer: 2024-12-10 00:27:16
original
340 Les gens l'ont consulté

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

L'obsolescence du passage const std::string& Références : le point de vue de Herb Sutter

Dans une récente conférence, Herb Sutter a exprimé la pertinence décroissante de en passant std :: vector et std :: string par const&. Il a suggéré que l'approche traditionnelle :

std::string do_something(const std::string& inval)
Copier après la connexion

est désormais moins souhaitable que :

std::string do_something(std::string inval)
Copier après la connexion

Bien qu'il soit reconnu qu'inval conserve sa taille, l'argument de Herb découle de scénarios impliquant un chaînage de fonctions. Prenons l'exemple où A appelle B, qui à son tour appelle C :

Cas 1 : Passage par const Reference

void B(const std::string& str) { C(str); }
void C(const std::string& str) { /* Use str but do not store it */ }
Copier après la connexion

Lorsque C nécessite un stockage, une opération de copie devient nécessaire :

void C(const std::string& str) { m_str = str; }
Copier après la connexion

Cependant, l'utilisation de const& empêche C d'accéder aux données sous-jacentes déplacées dans son paramètre.

Cas 2 : Passage par valeur

void B(std::string str) { C(std::move(str)); }
void C(std::string str) { m_str = std::move(str); }
Copier après la connexion

Dans ce scénario, la chaîne est déplacée dans les appels de fonction, évitant ainsi les copies inutiles. La surcharge de performances liée au passage à une valeur est compensée par les avantages d'éviter les allocations de mémoire pour les petites chaînes avec l'optimisation des chaînes courtes (SSO).

En fin de compte, le choix entre le passage par référence const ou par valeur dépend de l'utilisation spécifique. cas et la préférence du développeur pour l'efficacité de l'allocation de mémoire par rapport aux inconvénients potentiels en termes de performances.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal