C ++ 11ではstd::basic_string
、移動セマンティクスをサポートしています。つまり、一連の文字列operator+
の最初の文字列にメモリを割り当てて、一連の文字列の連結を最適化し、残りの文字列を、一連の文字列を連結して返すために必要なメモリ割り当てとコピーの数を大幅に削減します。
Qtの方法で指摘したように、さらに最適化できると確信していますが、C ++ 11で許可されている移動セマンティクスはstd::basic_string
、特にC++03バージョンに存在していたパフォーマンスの大きなハードルを克服します。たくさんの文字列を連結するとき。
たとえば、
std::string a = std::string("Blah blah") + " Blah Blah " + " Yadda, Yadda";
最初の文字列にメモリを割り当て、次に移動セマンティクスを使用して、最初の文字列から残りのメモリを「盗み」、2番目の2つの文字列をインプレースで構築し、余分なものがなくなった場合にのみメモリを再割り当てすることで実行できます。スペース。最後に、代入演算子は、move-semanticsを使用して、代入演算子の右側に作成された一時的なr値からメモリを「盗み」、連結された文字列のコピーを防ぐことができます。