Was ist der Unterschied zwischen std::string
und std::basic_string
? Und warum werden beide benötigt? aus Zeichentypen Strings für die Herstellung ist std::string
ein typedef
für eine Spezialisierung dieser Klasse Vorlage für char
Was ist der Unterschied zwischen std :: string und std :: basic_string? Und warum werden beide benötigt?
Antwort
std::basic_string
eine Klassenvorlage ist. Ja, sie werden beide benötigt (oder zumindest vom Standard gefordert).
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.
Der richtige Begriff ist "Spezialisierung". 'string' ist eine * Spezialisierung * von' basic_string'. – AnT
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
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. –
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>
.
- 1. Unterschied zwischen Std: String und Std :: String
- 2. Was ist der Unterschied zwischen std :: cout und std :: wcout?
- 3. Was ist der Unterschied zwischen std :: set und std :: map
- 4. Was ist der Unterschied zwischen std :: partial_sum und std :: inclusive_scan?
- 5. Was ist der Unterschied zwischen std :: function und std :: mem_fn
- 6. Was ist der Unterschied zwischen std :: string :: c_str und std :: string :: data?
- 7. Unterschied zwischen std :: Suche und std :: find_first_of
- 8. Unterschied zwischen std :: set und std :: priority_queue
- 9. Was ist der Unterschied zwischen std :: to_string, boost :: to_string und boost :: lexical_cast <std::string>?
- 10. Unterschied zwischen std :: exception und "..."
- 11. Was ist der Unterschied zwischen Boost Smartpointern und Std Smartpointern?
- 12. Was ist der Unterschied zwischen std :: tie und std :: make_tuple mit std :: ref-Argumenten?
- 13. Was ist der Unterschied zwischen string :: at und string :: operator []?
- 14. Unterschied zwischen std :: regex_match & std :: regex_search?
- 15. Std :: String und Std :: Map-Operationen auf Unicode-String
- 16. Was ist der Grund für den Unterschied im Zerstörungsverhalten zwischen std :: unique_ptr und std :: shared_ptr?
- 17. Unterschied zwischen std :: end (myVector) und myVector.end()
- 18. Vergleich zwischen Std: String und C-String
- 19. Unterschied zwischen std :: result_of und declltype
- 20. Unterschied zwischen Vektor :: begin() und std :: begin()
- 21. Unterschied zwischen std :: uninitialized_copy & std :: copy?
- 22. std :: string und std :: ios :: binary
- 23. Was ist der Unterschied zwischen String und StringBuilder?
- 24. Unterschiede zwischen std :: is_integer und std :: is_integral?
- 25. Was ist der Unterschied zwischen [] String und ... String in Golang?
- 26. Spezialisierungsfunktion Vorlage für beide std :: string und char *
- 27. Unterschied: std :: runtime_error vs std :: exception()
- 28. std :: u16string, std :: u32string, std :: string, length(), size(), codepoints und zeichen
- 29. Unterschied zwischen std :: mutex lock function und std :: lock_guard <std::mutex>?
- 30. Was ist der Unterschied zwischen (string [] args) und System.Environment.CommandLine?
warum sie beide benötigt werden? –
Sie sagen also, dass std :: string ist typedef std :: basic_string std :: string? –
@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