¿Cuál es la diferencia entre std::stringy std::basic_string? ¿Y por qué se necesitan ambos?
                94
            
  
              
        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 destd::basic_string<T>:typedef std::basic_string<char> stringstd::basic_stringEs necesario tener una interfaz similar para todo tipo de cadenas (wstringpor ejemplo).fuente
stringes 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::stringes una instanciación de lastd::basic_stringplantilla 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_stringuna instancia sin unchartipo.