boost::string_ref和boost::string_view的区别

13
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)
2个回答

13
有趣的是,我现在正在ACCU会议上与Marshall Clow一起(他是委员会中string_view等背后的力量),今天早些时候我刚好在酒吧里想问他关于string_view和Bjarne的指南支持库(GSL)gsl::span<T>的看法。GSL与string_view非常相似(gsl-lite是我个人最喜欢的GSL实现,因为它兼容03,但还有许多其他实现)。我听说它们将融合成单个实现进行标准化,而gsl::span<T>的方向将是未来,但如果我错了的话,我将在这里向大家报告。就目前而言,可以认为gsl::span<T>的方向是当前的未来,即使using string_view = gsl::span<char>本质上也是string_view。
编辑:我刚刚在楼下与Marshall谈过。他告诉我,根据Boost中的实现,string_view肯定在C++17中。array_view不是,历史上与string_view有关的任何内容现在也不是。GSL string_span是一个独立的实体,预计不会进入C++ 17,并且目前也没有任何计划将实现统一起来,因为它们解决不同的用例,具体而言,string_view始终是借用字符数组的常量视图,而string_span预计是一个可修改的借用字符数组的视图,可用作构建新字符串的源,因此string_span可能最终成为将来C++标准中string_view的概括。

1
请注意,有关string_view、array_view和span的委员会的最新更新是在二月份,并且详细信息可以在https://dev59.com/olsW5IYBdhLWcg3wk34q#36207785上找到。 - Niall Douglas
24
我对这个被接受的答案有点困惑,因为问题是关于boost::string_refboost::string_view的,但是这个答案似乎是关于gsl::boost::std::c++17的? - Aleksander Fular

10

根据boost邮件列表中的这封电子邮件,未来将不再使用boost::string_ref,并被其他boost库替换为string_view。

boost::string_view具有以下优点:

  • 更好地匹配C++17标准委员会的工作
  • 拥有更多的constexpr支持

7
“更好地符合C++17标准委员会的工作” - 具体而言,这与boost::string_ref有何不同? - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接