Unterschiede zwischen boost :: string_ref und boost :: string_view

8

Boost bietet zwei verschiedene Implementierungen von string_view , die Teil von C ++ 17 sein werden:

  • boost::string_ref in utility/string_ref.hpp
  • boost::string_view in core/string_view.hpp

Gibt es signifikante Unterschiede zwischen diesen? Welche sollte in Zukunft bevorzugt werden?

Hinweis: Boost :: log hat in Boost 1.61 bemerkt, dass string_ref zugunsten von string_view abgelehnt wurde; Vielleicht ist das ein Indikator? ( Ссылка )

    
leecbaker 18.04.2016, 21:41
quelle

2 Antworten

11

Lustig genug, gerade jetzt bin ich auf der ACCU-Konferenz mit Marshall Clow (der Kraft hinter string_view und anderen im Komitee) und ich wollte ihn heute früh in der Bar fragen, bevor ich über seine Ansichten weggerufen wurde auf string_view versus Bjarnes Guideline Support Library (GSL) gsl::span<T> ist eine sehr ähnliche Sache ( gsl-lite ist meine persönliche Lieblingsimplementierung der GSL, da es 03 kompatibel ist, aber es gibt viele andere). Ich hatte gehört, dass sie in einer einzigen Implementierung für die Standardisierung vereint werden sollten, und die gsl::span<T> -Richtung soll die Zukunft sein, aber ich melde mich hier aus dem Mund des Pferdes zurück, wenn ich falsch liege. Nehmen wir an, die Richtung gsl::span<T> ist die aktuelle Zukunft und Boost wird aktualisiert, um bald etwas Ähnliches zu haben, auch wenn using string_view = gsl::span<char> im Wesentlichen string_view ist.

Edit: Ich habe gerade mit Marshall unten gesprochen. Er sagt mir, dass string_view, wie die Implementierung in Boost, definitiv in C ++ 17 ist. Array_view ist nicht, noch gibt es etwas, das string_view vorerst umgibt.

Die GSL string_span ist eine separate Entität, von der erwartet wird, dass sie nicht in C ++ 17 eingetragen wird, noch gibt es Pläne, die Implementierungen zu vereinheitlichen, da sie verschiedene Anwendungsfälle lösen, insbesondere dass string_view immer eine konstante Ansicht des geliehenen Zeichenarrays ist Es wird erwartet, dass string_span eine potentiell modifizierbare Sicht auf das geborgte Zeichen-Array mit möglichen Verwendungen als eine Quelle für die Konstruktion neuer Zeichenketten ist, so dass string_span vielleicht eine Verallgemeinerung von string_view in einem zukünftigen C ++ - Standard wird.

    
Niall Douglas 19.04.2016, 21:51
quelle
4

Laut dieser E-Mail aus der Boost-Mailingliste hat boost :: string_ref gewonnen 't in der Zukunft verwendet werden und wird durch string_view in anderen Boost-Bibliotheken ersetzt.

boost :: string_view hat folgende Vorteile:

  • Besser passt das, was der Normenausschuss ist tun für C ++ 17
  • Hat viel mehr Unterstützung constexpr
leecbaker 18.04.2016 22:03
quelle

Tags und Links