string-view - gsl::string_span 和 std::string_view 有何不同?

标签 string-view guideline-support-library string-span

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

相关问题:What purpose does `gsl::string_span` aim at?

最佳答案

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是字符串的常量 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 .

关于string-view - gsl::string_span 和 std::string_view 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53051430/

相关文章:

c++ - gsl assert 与 c++ 中的 assert 的优势?

c++ - boost::any_range<gsl::string_span<>> 在 Release模式下崩溃

c++ - 将 gsl::zstring_view 与 C API 结合使用

c++ - std::string_view 到底比 const std::string& 快多少?

c++ - 为什么 Clang 的 -Wrange-loop-analysis 在带有 std::string_view 变量的 for 循环中发出警告? std::string_view 不是引用吗?

c++ - 将 string_view 静态转换为字符串是否合法

c++ - 窄播有什么作用?

c++ - 我应该返回 gsl::span<const T> 而不是 const std::vector<T>&