我在这里问了一个关于迭代器的问题:Prefer Iterators Over Pointers?我已经了解了它们提供的一些保护和调试功能。
但是,我相信begin
和end
现在在C风格的阵列上提供类似的可能性。
如果我想创建一个仅在STL算法中迭代的const string
,使用const string
仍然有优势,或者我更喜欢const char[]
begin
1}}和end
?
答案 0 :(得分:2)
所以答案取决于你正在使用的c ++版本
因为C ++ 98没有std::begin
或std::end
,所以最好的举动就是接受你将不得不支付构建和使用std::string
的费用。如果你有提升,你仍然应该考虑boost::string_ref
有两个原因。首先,它的构造总是避免分配,总体上比std::string
简单得多。
boost::string_ref
有效,因为它只存储指向字符串和长度的指针。因此,在所有情况下,开销都很小。
非常类似于C ++ 98,但使用boost::string_ref
的建议变得 MUCH 更强,因为c ++ 11具有constexpr
,允许编译器完全绕过构造在编译时构造对象。
据称(这不是最终的)图书馆基础知识TS将带给我们std::string_view
。 boost::string_ref
是早期std::string_view
提案的原型,旨在以某种形式将功能引入所有版本的C ++。
C ++ 14引入了带有"foo"s
语法的字符串文字,遗憾的是这只是一种方便。由于operator""s
不是constexpr
,因此无法在编译时对其进行评估,因此无法避免构造带来的惩罚。因此,它可以用来使代码更好看,但在这种情况下它不会提供任何其他好处。