web-dev-qa-db-fra.com

Est-il judicieux d'utiliser const std :: string & arguments en C ++ 17?

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++?

26
bartop

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_views dans std::strings pour vous assurer que les terminateurs sont nuls.

29
HolyBlackCat