2009-11-02 24 views

Antwort

49

std::basic_string eine Klassenvorlage ist. Ja, sie werden beide benötigt (oder zumindest vom Standard gefordert).

+9

warum sie beide benötigt werden? –

+1

Sie sagen also, dass std :: string ist typedef std :: basic_string std :: string? –

+1

@MuhammadAnnaqeeb 2,5 Jahre zu spät, aber die kurze Antwort ist auch eine breite Zeichenfolge (wstring) (Unicode, 2 Bytes pro Zeichen, wchar_t) zu unterstützen. – Andrew

26

std::string ist eine Instantiierung std::basic_string<T>:

typedef std::basic_string<char> string 

std::basic_string notwendig ist, eine ähnliche Schnittstelle für alle Arten von Zeichenketten (wstring zum Beispiel) zu haben.

+22

Der richtige Begriff ist "Spezialisierung". 'string' ist eine * Spezialisierung * von' basic_string'. – AnT

+1

Ich denke, Sie könnten darüber streiten. "Spezialisierung" wird normalerweise verwendet, um Vererbung anzuzeigen. Eine Template-Funktion {class | function} wird durch Ersetzen der Template-Argumente instanziiert. Es gibt eine teilweise Template-Spezialisierung, die hier jedoch nicht verwendet wird. – pmr

+4

Mit Bezug auf eine abgeleitete Klasse als "Spezialisierung" wird eine weniger formale Verwendung von "Spezialisierung" bezeichnet. Das Wort "Spezialisierung" wird im Standard nicht so verwendet (ich bin mir ziemlich sicher), aber es wird ausführlich verwendet, um die Spezialisierung von Vorlagen zu beschreiben. Der Name einer Template-Spezialisierung kann in Kontexten verwendet werden, die keine Instantiierung erzwingen und implizit sind, so dass Spezialisierung und Instanziierung separate Konzepte sind. Neben einer Template-Spezialisierung (dem Namen einer Vorlage mit einem bestimmten Parametersatz) gibt es auch partielle Spezialisierungen (nur Klassenvorlagen) und explizite Spezialisierungen. –

13

Eine std::string ist eine Instanziierung der std::basic_string Vorlage mit einem Typ von char. Sie benötigen beide, so dass Sie neben char Zeichenfolgen für eine Zeichenfolge mit breiten Zeichen erstellen können, z. B. std::basic_string<wchar_t>. Oder wenn Sie eine Zeichenfolge mit 32-Bit-Elementen wünschen, std::basic_string<unsigned int>.

Verwandte Themen