Antworten:
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 von std::basic_string<T>
:
typedef std::basic_string<char> string
std::basic_string
ist erforderlich, um eine ähnliche Schnittstelle für alle Arten von Zeichenfolgen zu haben ( wstring
zum Beispiel).
string
ist eine Spezialisierung von basic_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 der std::basic_string
Vorlage mit einem Typ von char
. Sie benötigen beides, damit Sie außerdem eine Reihe von Dingen erstellen können char
, 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>
.