2016-09-30 32 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()預先保留內存。