是一个常量字符串Still Preferrable

Is a const string Still Preferable?

本文关键字:常量 字符串 Still Preferrable 一个      更新时间:2023-10-16

我在这里问了一个关于迭代程序的问题:更喜欢迭代程序而不是指针?因此,我逐渐了解了它们提供的一些保护和调试功能。

然而,我相信beginend现在在C样式数组上提供了类似的可能性。

如果我想创建一个只在STL算法中迭代的const string,那么使用const string是否还有优势,或者我应该更喜欢const char[]beginend

所以答案取决于您使用的是什么版本的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变得更强,因为C++11具有constexpr,这允许编译器在编译时通过构造对象来完全绕过构造。

c++1z

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

关于C++14字符串文字

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