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
DDDoriginal
2024-12-10 00:27:16324parcourir

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)

est désormais moins souhaitable que :

std::string do_something(std::string inval)

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 */ }

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

void C(const std::string& str) { m_str = str; }

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); }

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!

Déclaration:
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