Чем отличаются gsl :: string_span и std :: string_view? - PullRequest
0 голосов
/ 29 октября 2018

Из того, что я могу извлечь, gsl::string_span и std::string_view, по-видимому, имеют по существу одинаковое обоснование для использования. Это действительно так? Если да, действительно ли они идентичны? Если нет - чем они отличаются?

Смежный вопрос: Какую цель преследует `gsl :: string_span`?

1 Ответ

0 голосов
/ 01 июля 2019

Чем отличаются gsl::string_span и std::string_view?

Довольно очевидное различие в том, как они доступны, но я скажу это, поскольку оно значимо: gsl::string_span требует использования сторонней библиотеки, тогда как std::string_view - это стандартный тип C ++. С другой стороны, библиотека, предоставляющая gsl::string_span, поддерживает C ++ 14, тогда как std::string_view требует C ++ 17.

Основное различие в дизайне заключается в том, что std::string_view является константным представлением строки и не предоставляет никакого способа изменения просматриваемой строки, тогда как gsl::string_span допускает неконстантный доступ. Например:

constexpr iterator gsl::string_span::begin() const noexcept
          ^^^^^^^^ note non-const iterator   ^^^^^ also note this

Также обратите внимание, как gsl::string_span разрешает неконстантный доступ, даже если сам диапазон является постоянным. другими словами, gsl::string_span не распространяет постоянство. Это то же самое, что std::span и gsl::span.

...