【发布时间】:2018-10-29 18:09:49
【问题描述】:
据我所知,gsl::string_span 和 std::string_view 似乎具有基本相同的使用理由。真的是这样吗?如果是这样,它们实际上是否相同?如果不是 - 它们有何不同?
【问题讨论】:
标签: string-view guideline-support-library string-span
据我所知,gsl::string_span 和 std::string_view 似乎具有基本相同的使用理由。真的是这样吗?如果是这样,它们实际上是否相同?如果不是 - 它们有何不同?
【问题讨论】:
标签: string-view guideline-support-library string-span
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 是如何允许非 const 访问的,即使 span 本身是 const 也是如此。换句话说,gsl::string_span 不会传播 constness。这与std::span 和gsl::span 相同。
【讨论】:
gsl::string_view一直在努力模仿即将到来的std::string_view吗?他们为什么会在深浅不变这样重要的事情上产生分歧?
std::string_view 不可变性的理由:open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3762.html#mutable