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)
有趣的是,我现在正在参加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的泛化。
有趣的是,我现在正在参加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的泛化。
根据 来自boost邮件列表的这封电子邮件,boost :: string_ref将来不会被使用,并且正被其他boost库中的string_view所取代。
boost :: string_view具有以下优点:
- 更符合标准委员会的要求
为C ++做的17
- 有更多的constexpr支持