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)
答案 0 :(得分:13)
现在我很有趣,我在ACCU会议上与Marshall Clow(委员会的string_view等人背后的力量)在今天早些时候被召唤之前,我很想在酒吧问他他对string_view与Bjarne的指南支持库(GSL)gsl::span<T>
的看法是一个非常相似的事情(gsl-lite是我个人最喜欢的GSL实现,因为它兼容,但还有很多其他的)。 我听说他们要统一为标准化的单一实施,而,Boost也会很快更新到类似的东西。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 :(得分:4)
根据this email from the boost mailing list,boost :: string_ref将来不会被使用,并且正被其他boost库中的string_view取代。
boost :: string_view具有以下优点: