【问题标题】:How do gsl::string_span and std::string_view differ?gsl::string_span 和 std::string_view 有何不同?
【发布时间】:2018-10-29 18:09:49
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    gsl::string_spanstd::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::spangsl::span 相同。

    【讨论】:

    • 不应该gsl::string_view一直在努力模仿即将到来的std::string_view吗?他们为什么会在深浅不变这样重要的事情上产生分歧?
    • @einpoklum 我不知道;应该是吗?我不知道他们的理由。我在这里找到了std::string_view 不可变性的理由:open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3762.html#mutable
    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多