C++ 常量字符串是否更可取?

C++ 常量字符串是否更可取?,c++,arrays,string,algorithm,iterator,C++,Arrays,String,Algorithm,Iterator,我在这里问了一个关于迭代器的问题:我逐渐了解了迭代器提供的一些保护和调试功能 然而,我相信这一点,现在在C型阵列上也提供了类似的可能性 ,它只在STL算法中重复使用,那么使用 const字符串< />代码还是有优势的,或者我应该更喜欢 const char []/Cube > 开始 >代码>结束< /C> >?/p> < p>所以答案取决于C++使用的是什么版本 C++98 因为C++98没有,或者最好的办法就是接受,你必须支付构建成本并使用std::string。如果你有Boost可用,你仍然

我在这里问了一个关于迭代器的问题:我逐渐了解了迭代器提供的一些保护和调试功能

然而,我相信这一点,现在在C型阵列上也提供了类似的可能性


<如果我想创建一个<代码> const字符串 >,它只在STL算法中重复使用,那么使用<代码> const字符串< />代码还是有优势的,或者我应该更喜欢<代码> const char []/Cube > <代码>开始<代码> >代码>结束< /C> >?/p> < p>所以答案取决于C++使用的是什么版本

C++98 因为C++98没有,或者最好的办法就是接受,你必须支付构建成本并使用
std::string
。如果你有Boost可用,你仍然应该考虑两个原因。首先,它的构造总是避免分配,总体上比
std::string
简单得多

boost::string\u ref
之所以有效,是因为它只存储指向字符串和长度的指针。因此,在所有情况下,开销都是最小的

c++11 与C++98非常相似,除了建议使用
boost::string_ref
变得更强,因为C++11具有
constexpr
,这允许编译器在编译时通过构造对象完全绕过构造

c++1z 据说(这不是最终的)图书馆将带给我们<代码> Boo::StrigiRef//Cuth>是早期代码“<>代码STD::StrigyVIEW < /C>”的原型,它的设计目的是将功能以某种形式带给C++的所有版本。 关于C++14字符串文本
C++14引入了带有语法的字符串文字,不幸的是,这只是一种方便。由于
运算符“s
不是
constexpr
,因此无法在编译时对其求值,因此无法避免构造带来的惩罚。因此,它可以用来使代码看起来更漂亮,但在这种情况下它不能提供任何其他好处。

如果您使用C++,您应该更喜欢<代码> STD::String 过<代码> char []/COD>快速澄清-从您的观点来看,是附加的STD::String API(包括String String::AT(siZeHT))。没那么重要吗?
但是,我相信begin和end现在在C样式数组上提供了类似的可能性
-erm,那里的“迭代器”不提供保护或调试capabilities@NathanOliver这里的复杂之处在于,即使是
const std::string
也不能在编译时构造(现在)所以程序在开始构建时将付出代价,当构建字符串时,首先看到。@ MGZZ我认为C++已经有了<代码> STD::String 文字。