В чем разница между std::string
и std::basic_string
? А зачем нужны оба?
94
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
типа.