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

ein*_*ica 5 string-view guideline-support-library string-span

据我所知,gsl::string_spanstd::string_view似乎有本质上使用的同一个道理。真的是这样吗?如果是这样,它们实际上是否相同?如果不是 - 它们有什么不同?

相关问题:`gsl::string_span` 的目的是什么?

eer*_*ika 3

有何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是字符串的 const 视图,并且不提供任何修改所查看字符串的方法,而gsl::string_span允许非常量访问。例如:

constexpr iterator gsl::string_span::begin() const noexcept
          ^^^^^^^^ note non-const iterator   ^^^^^ also note this
Run Code Online (Sandbox Code Playgroud)

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

  • 难道“gsl::string_view”不应该是模仿即将到来的“std::string_view”吗?为什么他们在深层恒定性与浅层恒定性这样重要的问题上存在分歧? (2认同)