2016-09-30 63 views
-2

如果我有,例如下面的代码:C++字符串连接性能

string x = "xyz" 

x=x+"qwe"; 

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

+5

[C++中有效的字符串连接]可能的重复(http://stackoverflow.com/questions/611263/efficient-string-concatenation-in-c) –

+0

它与'x.operator =(x.operator + ( “QWE”));'。 –

回答

1

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

如果要执行这个,你可以代替写:

x += "qwe"; 

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