Чем отличаются 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
.