В чем разница между std::stringи std::basic_string? А зачем нужны оба?
Ответы:
std::basic_stringэто шаблон класса для создания строк из символьных типов, std::stringэто typedefспециализация этого шаблона класса для char. Да, они оба необходимы (или, по крайней мере, требуются стандартом).
std::stringявляется экземпляром std::basic_string<T>:
typedef std::basic_string<char> string
std::basic_stringнеобходимо иметь аналогичный интерфейс для всех типов строк ( wstringнапример).
stringявляется специализация в basic_string.
namespace std { typedef basic_string<char> string; }Технически, это тоже не создание экземпляра, но, по крайней мере, ближе (создание, по определению, создает экземпляр, а typedef создает только имя, а не экземпляр ).
A std::string- это экземпляр std::basic_stringшаблона с типом char. Вам нужно и то, и другое, чтобы вы могли создавать строки из других вещей char, например, std::basic_string<wchar_t>для строки широких символов. Или , если вы хотите строку с 32 - битными элементами std::basic_string<unsigned int>.
std::basic_stringбез charтипа.