是一个常量字符串Still Preferrable
Is a const string Still Preferable?
我在这里问了一个关于迭代程序的问题:更喜欢迭代程序而不是指针?因此,我逐渐了解了它们提供的一些保护和调试功能。
然而,我相信begin
和end
现在在C样式数组上提供了类似的可能性。
如果我想创建一个只在STL算法中迭代的const string
,那么使用const string
是否还有优势,或者我应该更喜欢const char[]
与begin
和end
?
所以答案取决于您使用的是什么版本的c++
C++98
因为C++98没有std::begin
或std::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_view
。boost::string_ref
是std::string_view
早期提案的原型,旨在以某种形式将该功能引入C++的所有版本
关于C++14字符串文字
C++14引入了语法为"foo"s
的字符串文字,遗憾的是,这只是一种方便。因为operator""s
不是constexpr
,所以它不能在编译时进行评估,因此不能避免构造带来的惩罚。因此,它可以用来使代码看起来更好,但在这种情况下,它没有提供任何其他好处。
- 将常量字符串添加到非常量字符串是否会给出常量字符串
- 将收到的 usart uint8_t* 数据与常量字符串进行比较
- 为什么文字不是常量(字符串除外)?
- public:静态常量字符串声明/初始化问题
- 如何打印出常量字符串的第一个元素?
- 为什么在类体中无法启动静态常量字符串成员
- 如何从常量字符串初始化 LPWSTR?
- 如何在 C++03 中没有重复代码的情况下在堆栈上创建一个非常量 C 字符串数组?
- 需要帮助理解' 字符串 ltrim(常量字符串 &) ' 的含义
- 从常量字符串到布尔值的隐式强制转换
- 比较字符和常量字符串
- C++ lambda 到 std::函数错误与非常量字符串
- 让每个常量字符串都被引用是好的做法吗?
- 外部常量字符串的链接错误
- 无法初始化静态常量字符串
- 如何更改静态链接库中常量字符串数组的Visual Studio C++初始化顺序
- 对已编译的可执行文件中的常量字符串(例如密码)进行加密
- C++ 构造函数中的常量字符串 &name 和字符串名称之间的差异
- 哪个是正确的:矢量<常量字符串>或常量矢量<string>?
- 为什么字符串在函数参数中作为常量字符串传递