Qual è la differenza tra std::string
e std::basic_string
? E perché sono necessari entrambi?
Risposte:
std::basic_string
è un modello di classe per creare stringhe di tipi di carattere, std::string
è typedef
una specializzazione di quel modello di classe per char
. Sì, sono entrambi necessari (o almeno richiesti dallo standard).
std::string
è un'istanza di std::basic_string<T>
:
typedef std::basic_string<char> string
std::basic_string
è necessario avere un'interfaccia simile per tutti i tipi di stringhe ( wstring
ad esempio).
string
è una specializzazione di basic_string
.
namespace std { typedef basic_string<char> string; }
Tecnicamente, non è nemmeno un'istanza, ma è almeno più vicina (l'istanziazione, per definizione, crea un'istanza e un typedef crea solo un nome, non un'istanza ).
A std::string
è un'istanza del std::basic_string
modello con un tipo di char
. Hai bisogno di entrambi per poter creare stringhe di cose char
, ad esempio std::basic_string<wchar_t>
una stringa di caratteri larghi. O se volete una stringa con 32 elementi bit, std::basic_string<unsigned int>
.
std::basic_string
senza un char
tipo.