Was ist string_view?
string_view
zu sein scheint, eine vorgeschlagene Funktion innerhalb des C++ - Bibliothek Grundlagen TS: N3921
Soweit ich das verstanden habe ist es eine Art, die repräsentieren einer Art der Zeichenfolge "Konzept", dass ist ein Blick auf jede Art von container speichern könnte etwas sichtbarer als string.
- Ist das richtig ?
- Wenn dieser Vorschlag angenommen wird, wird die kanonische
const std::string&
parameter-Typ zu einemstring_view
? - Ist es ein weiterer wichtiger Punkt
string_view
zu berücksichtigen ?
InformationsquelleAutor der Frage Drax | 2013-12-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Zweck, jegliche und alle Arten von "string reference" und "array reference" Vorschläge zu vermeiden, kopieren von Daten, die bereits im Besitz von woanders und von denen auch nur ein nicht-mutierenden Sicht erforderlich ist. Die
string_view
in Frage, ist ein solcher Vorschlag; es wurden früher diejenigen bezeichnetstring_ref
undarray_ref
auch.Die Idee ist immer, zu speichern ein paar Zeiger-auf-ersten-element und die Größe von einigen bestehenden Daten-array oder string.
Solche view-handle-Klasse können übergeben werden, um günstig in Wert und würde bieten günstige substringing Operationen (können implementiert werden als einfache Zeiger-Schritten und-Größe-Einstellungen).
Viele Verwendungen von strings benötigen nicht den tatsächlichen Besitz der Streicher und die Zeichenfolge in der Frage wird oft bereits im Besitz einer anderen Person. So gibt es ein echtes Potenzial für die Steigerung der Effizienz durch die Vermeidung von nicht benötigten Kopien (denken Sie an all die Zuordnungen und Ausnahmen, die Sie speichern können).
Original C-strings wurden, leiden unter dem problem, dass der null-terminator war Teil der string-APIs, so dass Sie nicht leicht zu erstellen Teilstrings ohne mutierend der zugrunde liegenden saite (a la
strtok
). In C++ ist dies ganz einfach gelöst werden, indem die Länge getrennt und das einwickeln der Zeiger und der Größe, in einer Klasse.Das größte Hindernis und die Abweichung von den C++ - standard-Bibliothek-Philosophie, die ich mir vorstellen kann ist, dass solche "Referentielle view" - Klassen haben völlig verschiedene Eigentums-Semantik aus dem rest der standard-Bibliothek. Im Grunde genommen, alles andere in der standard-Bibliothek ist bedingungslos sicher und richtig (wenn es kompiliert, ist es richtig). Mit den Referenz-Klassen wie diese, das ist nicht mehr wahr. Die Richtigkeit des Programms ist abhängig von der umgebenden code, der diese Klassen verwendet. So, dass ist schwieriger zu überprüfen und zu lehren.
InformationsquelleAutor der Antwort Kerrek SB