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

lee*_*ker 12 boost string-view

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)

Nia*_*las 13

有趣的是,我现在正在与马歇尔·克洛(这是委员会的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是预期的作为借用字符数组的潜在可修改视图,潜在用途是构造新字符串的源,因此在未来的某些C++标准中,string_span可能最终会成为string_view的泛化.

  • 我对这个被接受的答案感到有点困惑,问题是关于`boost :: string_ref`和`boost :: string_view`然而这个答案似乎是关于`gsl ::``boost ::`和`std :: c ++ 17`? (6认同)

lee*_*ker 6

根据来自boost邮件列表的电子邮件,boost :: string_ref将来将不再使用,在其他boost库中将由string_view代替。

boost :: string_view具有以下优点:

  • 更好地符合标准委员会为C ++ 17所做的工作
  • 有更多的constexpr支持

  • “更好地符合标准委员会为C ++ 17所做的工作”-具体来说,这意味着什么(在boost :: string_ref的不同之处)? (3认同)