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

时间:2016-04-18 21:41:25

标签: boost string-view

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

    boost::string_ref
  • utility/string_ref.hppboost::string_view
  • core/string_view.hpp

这些之间是否存在显着差异?哪个应该是首选的?

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

2 个答案:

答案 0 :(得分:13)

现在我很有趣,我在ACCU会议上与Marshall Clow(委员会的string_view等人背后的力量)在今天早些时候被召唤之前,我很想在酒吧问他他对string_view与Bjarne的指南支持库(GSL)gsl::span<T>的看法是一个非常相似的事情(gsl-lite是我个人最喜欢的GSL实现,因为它兼容,但还有很多其他的)。 我听说他们要统一为标准化的单一实施,而gsl::span<T>的方向是未来,但我会从马的嘴里回来报告如果我错了。现在,假设gsl::span<T>方向是当前的未来,即使using string_view = gsl::span<char>本质上是string_view ,Boost也会很快更新到类似的东西。

编辑:我刚跟楼下的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 :(得分:4)

根据this email from the boost mailing list,boost :: string_ref将来不会被使用,并且正被其他boost库中的string_view取代。

boost :: string_view具有以下优点:

  • 更符合标准委员会的职责 做C ++ 17
  • 有更多的constexpr支持