12

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

4

2 回答 2

13

有趣的是,我现在正在与 Marshall Clow(string_view 等人在委员会背后的力量)参加 ACCU 会​​议,今天早些时候我正要在酒吧问他,然后我被叫走了他对 string_view 与Bjarne 的 Guideline Support Library (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 可能最终可能成为 string_view 在某些未来 C++ 标准中的泛化。

于 2016-04-19T21:51:27.673 回答
8

根据boost 邮件列表中的这封电子邮件,boost::string_ref 将来不会被使用,而是在其他 boost 库中被 string_view 取代。

boost::string_view 具有以下优点:

  • 更好地匹配标准委员会为 C++17 所做的工作
  • 有更多的 constexpr 支持
于 2016-04-18T22:03:35.440 回答