const字符串仍然优先吗?

时间:2015-03-20 12:31:37

标签: c++ arrays string algorithm iterator

我在这里问了一个关于迭代器的问题:Prefer Iterators Over Pointers?我已经了解了它们提供的一些保护和调试功能。

但是,我相信beginend现在在C风格的阵列上提供类似的可能性。

如果我想创建一个仅在STL算法中迭代的const string,使用const string仍然有优势,或者我更喜欢const char[] begin 1}}和end

1 个答案:

答案 0 :(得分:2)

所以答案取决于你正在使用的c ++版本

C ++ 98

因为C ++ 98没有std::beginstd::end,所以最好的举动就是接受你将不得不支付构建和使用std::string的费用。如果你有提升,你仍然应该考虑boost::string_ref有两个原因。首先,它的构造总是避免分配,总体上比std::string简单得多。

boost::string_ref有效,因为它只存储指向字符串和长度的指针。因此,在所有情况下,开销都很小。

C ++ 11

非常类似于C ++ 98,但使用boost::string_ref的建议变得 MUCH 更强,因为c ++ 11具有constexpr,允许编译器完全绕过构造在编译时构造对象。

C ++ 1Z

据称(这不是最终的)图书馆基础知识TS将带给我们std::string_viewboost::string_ref是早期std::string_view提案的原型,旨在以某种形式将功能引入所有版本的C ++。

On C ++ 14 String Literals

C ++ 14引入了带有"foo"s语法的字符串文字,遗憾的是这只是一种方便。由于operator""s不是constexpr,因此无法在编译时对其进行评估,因此无法避免构造带来的惩罚。因此,它可以用来使代码更好看,但在这种情况下它不会提供任何其他好处。