gsl::string_span 和 std::string_view 有何不同?

How do gsl::string_span and std::string_view differ?

据我所知,gsl::string_spanstd::string_view 似乎具有基本相同的使用理由。真是这样吗?如果是这样,它们实际上是相同的吗?如果不是 - 它们有何不同?

相关问题:

How do gsl::string_span and std::string_view differ?

它们的可用方式有一个相当明显的区别,但我会说,因为它很重要:gsl::string_span 需要使用第三方库,而 std::string_view 是标准的 C++类型。另一方面,提供gsl::string_span的库支持C++14,而std::string_view需要C++17。

一个主要的设计差异是 std::string_view 是字符串的常量视图,不提供任何修改查看字符串的方法,而 gsl::string_span 允许 non-const使用权。例如:

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

还要注意 gsl::string_span 如何允许 non-const 访问,即使跨度本身是常量。换句话说,gsl::string_span 不会传播常量。这与 std::spangsl::span 相同。