2010-11-23 16 views
1

Il existe sûrement plusieurs façons d'utiliser des chaînes en C++: char*, w_char*, CString, std::string, puis quelques typedefs comme LPTSTR et d'autres permutations de lettres que personne d'autre que les programmeurs C++ expérimentés ne comprend. Je me souviens avoir lu un article (il y a longtemps), où l'auteur critiquait C++ pour son incohérence dans le traitement des chaînes de caractères. Il a donné un nombre exact de différents types de chaînes en C++. Je voudrais soit trouver cet article, ou une autre référence qui fournit un certain nombre de types de chaînes disponibles en C++.Combien de types de chaînes existent en C++?

Parce que de toute évidence, on peut créer encore une autre typedef tout moment, la question est: Quel est le plus minoration du nombre de types de chaîne utilisés généralement connus aujourd'hui en C++?

+6

Malheureusement, cette question n'a pas de réponse. Obtenez un nombre exact et je vais créer un nouveau type de chaîne, donc ça va être '++ exactNumber' –

+0

La question est d'obtenir le plus haut connu minorant aujourd'hui;) – Marek

+0

La question dans le titre, « Combien de chaîne les types existent en C++? ", _is_ une vraie question. La question en gras, "Quelle est la limite inférieure la plus élevée du nombre de types de chaînes généralement utilisés aujourd'hui en C++?", Ne l'est pas. –

Répondre

1

Combien de types de chaînes existent en C++?

Trois types de chaîne sont définis dans la langue (voir Wikipedia):

  • std::string (un typedef pour basic_string<char>)
  • std::wstring (un typedef pour basic_string<wchar_t>)
  • basic_string (une classe modèle)

Un char * n'est pas une chaîne. C'est un pointeur vers un char.

Un w_char* n'est pas une chaîne. C'est un pointeur vers un w_char.

CString n'est pas défini dans la langue.

Bien sûr, je pourrais créer mon propre type de chaîne: CCoolString. Lorsque vous y ajoutez un 's', il est stocké sous la forme d'un 'z'. Mais cela ne fait pas partie de la langue elle-même - c'est juste mon code. En interne, il utiliserait un std::string.


Quel est le plus minoration du nombre de types de chaîne utilisés généralement connus aujourd'hui en C++?

Pas vraiment une question. Il ne peut pas être répondu, car cela dépend des utilisateurs.

+0

Voilà pourquoi je l'ai appelé char * comme l'un des « façons comment utiliser des chaînes en C++ » – Marek

+0

Et je suis pas non plus poser des questions sur les types qui font partie de la spécification du langage, plutôt sur les types de chaîne couramment utilisés. – Marek

+0

@Marek J'ai essayé de clarifier le concept. En fait, un inconvénient de l'utilisation de char * pour gérer les chaînes est que vous ne pouvez pas les indiquer à partir d'autres pointeurs non liés à la chaîne, char; dans une signature de fonction, par exemple. –

0

Il n'existe aucun type de chaîne par défaut en C++. En utilisant char *, et w_char * on peut créer n'importe quelle quantité de chaîne qu'il/elle veut. std :: string, CString et LPTSTR font tous partie de différentes bibliothèques, dont je ne suis pas sûr qu'elles font partie de la norme. (Ils peuvent être ou ils peuvent ne pas être). Vous pouvez créer votre propre MarekString, qui peut également être un type de chaîne. Et en ce que C++ est vraiment incohérent, même je me souviens d'une suggestion de Joel Spolsky pour en faire un type de données par défaut.

P.S. vous avez oublié char [] et w_char [], qui sont légèrement différents de ceux de * contrepartie.

+1

Mais il y en a un: std :: string. –

+0

J'ai probablement oublié beaucoup d'autres, je me souviens de quelque chose comme "160 façons de traiter le type de chaîne" dans l'article original je faisais référence à – Marek