Comment vérifier si une chaîne std :: ssortingng est définie ou non?

Si vous utilisez un caractère char* , je peux l’initialiser à NULL et vérifier plus tard s’il est défini en effectuant une comparaison. Comment faire la même chose pour un std::ssortingng ? Comment vérifier si la chaîne est définie ou non?

EDIT: Que faire si la chaîne que j’ai définie est également vide? Dois-je utiliser un indicateur supplémentaire pour vérifier si la std::ssortingng est définie ou non?

Utilisez empty() :

 std::ssortingng s; if (s.empty()) // nothing in s 

Comme plusieurs réponses l’ont souligné, std::ssortingng n’a pas de concept de «nullité» pour sa valeur. Si utiliser une chaîne vide en tant que telle n’est pas une valeur suffisante (par exemple, vous devez faire la distinction entre une chaîne sans caractère et une chaîne sans valeur), vous pouvez utiliser une std::ssortingng* et la définir à NULL ou à une instance std::ssortingng valide, le cas échéant.

Vous souhaiterez peut-être utiliser une sorte de type de pointeur intelligent (boost :: scoped_ptr ou autre) pour vous aider à gérer la durée de vie de tout object std::ssortingng auquel vous définissez le pointeur.

Vous ne pouvez pas; du moins pas la même façon que vous pouvez tester si un pointeur est NULL .

Un object std::ssortingng est toujours initialisé et contient toujours une chaîne; son contenu par défaut est une chaîne vide ( "" ).

Vous pouvez tester la vacuité (en utilisant s.size() == 0 ou s.empty() ).

Le constructeur par défaut de std :: ssortingng retourne toujours un object défini sur une chaîne vide.

Il n’y a pas d’état “non défini” pour std::ssortingng , il est toujours défini sur quelque chose.

Je ne pense pas que vous puissiez dire avec la classe std :: ssortingng. Cependant, si vous avez vraiment besoin de cette information, vous pouvez toujours dériver une classe de std :: ssortingng et donner à la classe dérivée la possibilité de savoir si elle a été modifiée depuis la construction (ou un autre moment arbitraire). Ou mieux encore, écrivez simplement une nouvelle classe qui encapsule std :: ssortingng, car dériver de std :: ssortingng peut ne pas être une bonne idée étant donné l’absence d’un destructeur virtuel de classe de base. C’est probablement plus de travail, mais plus de travail est nécessaire pour une solution optimale.

Bien sûr, vous pouvez toujours supposer que si elle contient autre chose que “” alors elle a été “définie”, cela ne la détectera pas manuellement en définissant “”.