Чем отличаются gsl::string_span и std::string_view?
Из того, что я могу собрать, gsl::string_span
а также std::string_view
кажется, по сути, то же самое обоснование для использования. Это действительно так? Если да, действительно ли они идентичны? Если нет - чем они отличаются?
0 ответов
Как
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
.