Antworten:
std::basic_stringist eine Klassenvorlage zum Erstellen von Zeichenfolgen aus Zeichentypen, std::stringist typedefeine Spezialisierung dieser Klassenvorlage für char. Ja, beide werden benötigt (oder zumindest vom Standard verlangt).
std::stringist eine Instanziierung von std::basic_string<T>:
typedef std::basic_string<char> string
std::basic_stringist erforderlich, um eine ähnliche Schnittstelle für alle Arten von Zeichenfolgen zu haben ( wstringzum Beispiel).
stringist 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::stringist eine Instanziierung der std::basic_stringVorlage 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>.