En obtenant string_view
en C++ 17, nous avons obtenu une méthode bon marché pour passer les deux std::string
et char*
aux fonctions qui ne s'approprient pas la chaîne et évitent de faire des copies temporaires. En utilisant std::string
passé par valeur et std::move
nous obtenons un passage explicite et rapide de la propriété des chaînes pour les références de valeur r et de valeur l.
Ma question est: y a-t-il un avantage à utiliser const std::string&
comme n'importe quel paramètre de fonction dans la nouvelle norme C++?
Oui.
Le problème avec std::string_view
est qu'il ne se souvient pas s'il pointe vers une chaîne terminée par un caractère nul ou non.
Si vous écrivez un wrapper pour une api C qui utilise des chaînes terminées par null, vous devrez constamment copier votre std::string_view
s dans std::string
s pour vous assurer que les terminateurs sont nuls.