【问题标题】:Differences between boost::string_ref and boost::string_viewboost::string_ref 和 boost::string_view 的区别
【发布时间】:2016-04-18 21:41:24
【问题描述】:

Boost 提供了两种不同的 string_view 实现,它们将成为 C++17 的一部分:

  • boost::string_refutility/string_ref.hpp
  • boost::string_viewcore/string_view.hpp

这些之间有什么显着差异吗?未来应该首选哪个?

注意:我注意到在 Boost 1.61 中,boost::log 已弃用 string_ref 以支持 string_view;也许这是一个指标? (http://www.boost.org/users/history/version_1_61_0.html)

【问题讨论】:

    标签: boost string-view


    【解决方案1】:

    有趣的是,我现在正在与 Marshall Clow(委员会中 string_view 等人背后的力量)一起参加 ACCU 会​​议,我正要在今天早些时候在酒吧问他,然后才被叫走他的观点关于 string_view 与 Bjarne 的指南支持库 (GSL) gsl::span<T> 非常相似(gsl-lite 是我个人最喜欢的 GSL 实现,因为它与 03 兼容,但还有很多其他的)。 我听说他们将被统一为一个标准化的实现,gsl::span<T> 的方向是未来,但如果我错了,我会亲自从马口中回来报告。现在,假设gsl::span<T> 方向是当前的未来,Boost 很快就会更新为类似的东西,即使using string_view = gsl::span<char> 本质上是 string_view

    编辑:我刚刚和楼下的马歇尔谈过了。他告诉我,根据 Boost 中的实现,string_view 肯定在 C++ 17 中。array_view 不是,现在也没有任何历史上围绕 string_view 的东西。

    GSL string_span 是一个单独的实体,预计不会进入 C++ 17,目前也没有任何计划统一实现,因为它们解决了不同的用例,特别是 string_view 始终是借用字符数组的常量视图,而string_span 有望成为借用字符数组的潜在可修改视图,并可能用作构建新字符串的来源,因此 string_span 可能最终在某些未来的 C++ 标准中成为 string_view 的泛化。

    【讨论】:

    • 仅供参考,委员会对 string_view、array_view 和 span 的最后一次更新是在 2 月,详细信息在 stackoverflow.com/a/36207785/805579
    • 我对这个被接受的答案有点困惑,问题是关于 boost::string_refboost::string_view 而这个答案似乎是关于 gsl:: boost::std:: c++17
    【解决方案2】:

    根据this email from the boost mailing list,boost::string_ref 以后不会使用了,正在其他boost库中被string_view替代。

    boost::string_view 有以下优点:

    • 更好地匹配标准委员会的内容 为 C++17 做的事情
    • 有更多的 constexpr 支持

    【讨论】:

    • “更好地匹配标准委员会为 C++17 所做的工作”——具体来说,这是什么意思(与 boost::string_ref 不同)?
    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2015-01-28
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多