2 votes

Devrais-je régulièrement passer le std::string par référence pour optimiser le temps d'exécution en C++14?

Comment passer la std::string à la fonction pour gagner en vitesse d'exécution pour ce extrait de code (strictement C++14, la fonction imprime ou enregistre uniquement la chaîne reçue):

#include <iostream>

void myFunction1(std::string msg)// ceci est plus rapide ?
{
    std::cout << msg;
}

void myFunction2(const std::string& msg)// celui-ci est plus rapide ?
{
    std::cout << msg;
}

int main()
{
    myFunction("Bonjour le monde");
    myFunction("Longue chaîne de 127 caractères");
    myFunction("Une autre longue chaîne de 256 caractères");
    return 0;
}

1voto

HolyBlackCat Points 2137

Ça dépend. Dans ce cas, vous pourriez (et devriez) passer std::string_view (qui a été ajouté en C++17) pour éviter une allocation de mémoire potentiellement importante lors du passage d'une grande chaîne littérale.

Mais si vous aviez besoin d'une chaîne null-terminée, alors std::string_view ne fonctionnerait pas, et vous devriez passer soit const std::string & soit un remplacement personnalisé de string_view qui est toujours null-terminé.

Ou, si vous vouliez copier la chaîne quelque part, vous devriez plutôt passer std::string par valeur et ensuite l'utiliser avec std::move.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X