Je s'asseoir et réfléchir pour savoir si ou non je dois être l'aide d' const char*
ou const std::string&
assez souvent quand je suis à la conception d'interfaces de classes, et quand il descend à lui, j'ai souvent envie de il y a 6 dans une main avec une demi-douzaine de l'autre.
Prendre la suite de deux prototypes de fonction:
void foo(const char* str);
void foo(std::string str);
Si l' foo
fonction de stocker une chaîne de caractères, je dirais que la deuxième est une meilleure option en raison de la capacité de passer d'une chaîne et d'utiliser la sémantique de déplacement, lorsque cela est possible. Toutefois, si foo
seulement nécessaires à la lecture de la chaîne, l' const char*
solution de mieux?
Sur un point de vue performances, temporaire std::string
n'auraient pas besoin d'être créé. Toutefois, l'appel de la fonction avec une chaîne comme argument regards insistants: foo(mystr.c_str())
. Pire encore, si des opérations plus avancées doivent être faites sur le tableau à un certain point bas de la route ou si une copie doit être stocké, l'interface doit alors changer.
Donc ma questions est:est-ce
Existe-il bien défini, que ce soit personnel ou non, les conventions que la règle lors de l' std::string
ou const char*
est un meilleur choix? En outre, lors du démarrage d'un nouveau projet, est-il préférable d'être en accord avec l'usage ou il suffit de prendre celui qui correspond à l'actuel morceau de code de meilleur?