【问题标题】:C++ string concatenation performanceC++ 字符串连接性能
【发布时间】:2016-09-30 08:05:03
【问题描述】:

如果我有例如此代码:

string x = "xyz"

x=x+"qwe";

前面的操作是如何工作的,它是否分配了一个大小为 x 两倍的新字符串,然后它复制旧元素,然后复制新元素?

【问题讨论】:

标签: c++ string concatenation


【解决方案1】:

没有编译器优化,是的。 x+"qwe" 是一个可以在任何地方使用的表达式,而不仅仅是在 x 赋值的右侧,因此它将创建一个长度为 6 的新 std::string 对象。在第二步中,x被赋予这个新的 std::string 对象的值,并且新的字符串对象被丢弃。启用优化的智能编译器可能足够聪明,可以一开始就消除临时对象的创建,但当然不能保证。

如果你想强制执行,你可以改写:

x += "qwe";

这会阻止任何临时对象的创建。如果新大小超过其容量,字符串对象仍可能需要分配内存。您可以通过查看 x.capacity() 来检查这一点,如果您关心实时性,可以使用 x.reserve() 预先保留内存。

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 2010-10-03
    • 1970-01-01
    • 2022-09-30
    • 2015-10-14
    • 2017-12-24
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多