62 votes

Initialisation des chaînes de caractères en tant que chaînes nulles ou vides

Quelle importance cela a-t-il si mon code C++ (comme indiqué ci-dessous) a une chaîne initialisée comme une chaîne vide :

std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
    // do something
}

par rapport à une initialisation nulle :

std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
    // do something
}

Existe-t-il des bonnes pratiques ou des problèmes à cet égard ?

82voto

SingerOfTheFall Points 9936

Il existe une fonction empty() prêt pour vous en std::string:

std::string a;
if(a.empty())
{
    //do stuff. You will enter this block if the string is declared like this
}

o

std::string a;
if(!a.empty())
{
    //You will not enter this block now
}
a = "42";
if(!a.empty())
{
    //And now you will enter this block.
}

29voto

juanchopanza Points 115680

Il n'y a pas d'obstacles. La construction par défaut de std::string es "" . Mais il n'est pas possible de comparer une chaîne de caractères à NULL . La méthode la plus proche consiste à vérifier si la chaîne est vide ou non, à l'aide de la fonction std::string::empty méthode

25voto

Luchian Grigore Points 136646

Le meilleur :

 std::string subCondition;

Cela crée une chaîne vide.

Ceci :

std::string myStr = "";

effectue une initialisation par copie - crée une chaîne temporaire à partir de "" et utilise ensuite le constructeur de copie pour créer myStr .

Bonus :

std::string myStr("");

effectue une initialisation directe et utilise le string(const char*) constructeur.

Pour vérifier si une chaîne de caractères est vide, il suffit d'utiliser empty() .

8voto

Andrew Points 14301

Je préférerais

if (!myStr.empty())
{
    //do something
}

Vous n'avez pas non plus à écrire std::string a = ""; . Vous pouvez simplement écrire std::string a; - il sera vide par défaut

7voto

Adam Romanek Points 201

Le vide et le "NULL" sont deux concepts différents. Comme d'autres l'ont mentionné, le premier peut être obtenu par std::string::empty() ce dernier peut être obtenu avec boost::optional<std::string> , par exemple :

boost::optional<string> myStr;
if (myStr) { // myStr != NULL
    // ...
}

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