¿Cuál es la diferencia entre std::string
y std::basic_string
? ¿Y por qué se necesitan ambos?
94
std::basic_string
es una plantilla de clase para hacer cadenas de tipos de caracteres, std::string
es una typedef
plantilla de especialización de esa clase para char
. Sí, ambos son necesarios (o al menos requeridos por el estándar).
std::string
es una instanciación destd::basic_string<T>
:typedef std::basic_string<char> string
std::basic_string
Es necesario tener una interfaz similar para todo tipo de cadenas (wstring
por ejemplo).fuente
string
es una especialización debasic_string
.namespace std { typedef basic_string<char> string; }
Técnicamente, tampoco es realmente una instanciación, pero al menos está más cerca (la instanciación, por definición, crea una instancia, y una typedef solo crea un nombre, no una instancia ).A
std::string
es una instanciación de lastd::basic_string
plantilla con un tipo dechar
. Necesita ambos para poder hacer cadenas de cosas ademáschar
, comostd::basic_string<wchar_t>
una cadena de caracteres anchos. O si quieres una cadena con elementos de 32 bits,std::basic_string<unsigned int>
.fuente
std::basic_string
una instancia sin unchar
tipo.