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

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

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

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.

Другие вопросы по тегам