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


Boost提供了两种不同的实现方式 string_view,这将是C ++ 17的一部分:

  • boost::string_ref 在 utility/string_ref.hpp
  • boost::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


8792
2018-04-18 21:41


起源



答案:


有趣的是,我现在正在参加ACCU会议上与Marshall Clow(委员会的string_view等人背后的力量)我今天早些时候在酒吧里问他关于他对string_view的看法Bjarne的指南支持库(GSL) gsl::span<T> 这是一个非常相似的事情(GSL-精简版 是我个人最喜欢的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的泛化。


11
2018-04-19 21:51



仅供参考委员会对string_view,array_view和span的最新更新于2月份进行了详细介绍 stackoverflow.com/a/36207785/805579 - Niall Douglas
我对这个被接受的答案感到有些困惑,问题是关于 boost::string_ref 和 boost::string_view 然而这个答案似乎是关于 gsl::  boost:: 和 std:: c++17 ? - Aleksander Fular


答案:


有趣的是,我现在正在参加ACCU会议上与Marshall Clow(委员会的string_view等人背后的力量)我今天早些时候在酒吧里问他关于他对string_view的看法Bjarne的指南支持库(GSL) gsl::span<T> 这是一个非常相似的事情(GSL-精简版 是我个人最喜欢的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的泛化。


11
2018-04-19 21:51



仅供参考委员会对string_view,array_view和span的最新更新于2月份进行了详细介绍 stackoverflow.com/a/36207785/805579 - Niall Douglas
我对这个被接受的答案感到有些困惑,问题是关于 boost::string_ref 和 boost::string_view 然而这个答案似乎是关于 gsl::  boost:: 和 std:: c++17 ? - Aleksander Fular


根据 来自boost邮件列表的这封电子邮件,boost :: string_ref将来不会被使用,并且正被其他boost库中的string_view所取代。

boost :: string_view具有以下优点:

  • 更符合标准委员会的要求 为C ++做的17
  • 有更多的constexpr支持

4
2018-04-18 22:03



“更好地匹配标准委员会为C ++ 17做的事情” - 具体来说,这意味着什么(在boost :: string_ref的差异中)? - sehe