¿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 de std::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).
string
es una especialización de basic_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 la std::basic_string
plantilla con un tipo de char
. Necesita ambos para poder hacer cadenas de cosas además char
, como std::basic_string<wchar_t>
una cadena de caracteres anchos. O si quieres una cadena con elementos de 32 bits, std::basic_string<unsigned int>
.
std::basic_string
una instancia sin un char
tipo.