В чем разница между 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
типа.