Qual è la differenza tra std::stringe 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è typedefuna 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 ( wstringad 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_stringmodello 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_stringsenza un chartipo.