¿Cuál es la diferencia entre std::stringy std::basic_string? ¿Y por qué se necesitan ambos?
Respuestas:
std::basic_stringes una plantilla de clase para hacer cadenas de tipos de caracteres, std::stringes una typedefplantilla de especialización de esa clase para char. Sí, ambos son necesarios (o al menos requeridos por el estándar).
std::stringes una instanciación de std::basic_string<T>:
typedef std::basic_string<char> string
std::basic_stringEs necesario tener una interfaz similar para todo tipo de cadenas ( wstringpor ejemplo).
stringes 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::stringes una instanciación de la std::basic_stringplantilla 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_stringuna instancia sin un chartipo.