gsl::string_span 和 std::string_view 有何不同?
How do gsl::string_span and std::string_view differ?
据我所知,gsl::string_span
和 std::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::span
和 gsl::span
相同。
据我所知,gsl::string_span
和 std::string_view
似乎具有基本相同的使用理由。真是这样吗?如果是这样,它们实际上是相同的吗?如果不是 - 它们有何不同?
相关问题:
How do
gsl::string_span
andstd::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::span
和 gsl::span
相同。