我在这里问了一个关于迭代器的问题:Prefer Iterators Over Pointers?结果,我开始了解他们提供的一些保护和调试功能。
不过,我相信begin
和 end
现在在 C 风格数组上提供类似的可能性。
如果我想创建一个只会在 STL 算法中迭代的 const string
,使用 const string
是否仍然有优势,或者我应该更喜欢const char[]
with begin
和 end
?
最佳答案
所以答案取决于您使用的 c++ 版本
C++98
因为 C++98 没有 std::begin
或 std::end
最好的办法就是接受你将不得不支付 build 成本并使用 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_view
. boost::string_ref
是早期提议的 std::string_view
的原型(prototype),旨在以某种形式将功能引入所有版本的 C++。
关于 C++14 字符串文字
C++14 引入了语法为 "foo"s
的字符串文字不幸的是,这只是一种方便。因为 operator""s
不是 constexpr
,它不能在编译时求值,因此不能避免构造带来的惩罚。所以它可以用来使代码看起来更漂亮,但在这种情况下它没有提供任何其他好处。
关于c++ - const 字符串仍然更可取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29166578/