Was ist der Unterschied zwischen std::string
und std::basic_string
? Und warum werden beide benötigt?
90
std::basic_string
ist eine Klassenvorlage zum Erstellen von Zeichenfolgen aus Zeichentypen, std::string
ist typedef
eine Spezialisierung dieser Klassenvorlage für char
. Ja, beide werden benötigt (oder zumindest vom Standard verlangt).
std::string
ist eine Instanziierung vonstd::basic_string<T>
:std::basic_string
ist erforderlich, um eine ähnliche Schnittstelle für alle Arten von Zeichenfolgen zu haben (wstring
zum Beispiel).quelle
string
ist eine Spezialisierung vonbasic_string
.namespace std { typedef basic_string<char> string; }
Technisch gesehen ist es auch keine wirkliche Instanziierung, aber zumindest näher (Instanziierung erstellt per Definition eine Instanz, und ein typedef erstellt nur einen Namen, keine Instanz ).A
std::string
ist eine Instanziierung derstd::basic_string
Vorlage mit einem Typ vonchar
. Sie benötigen beides, damit Sie außerdem eine Reihe von Dingen erstellen könnenchar
, z. B.std::basic_string<wchar_t>
für eine Reihe von breiten Zeichen. Oder wenn Sie eine Zeichenfolge mit 32-Bit-Elementen möchten ,std::basic_string<unsigned int>
.quelle