スニペットを考えて、a、b、c、dが空でない文字列であるとしましょう。次いでstd :: stringと複数の連結
std::string a, b, c, d;
d = a + b + c;
それら3つのstd::string
インスタンスの合計を計算する場合、標準ライブラリ実装が第1の一時std::string
オブジェクトを作成し、その内部バッファにa
とb
の連結バッファをコピーすることは、一時的な文字列の間で同様の動作を行いますc
。
この動作の代わりに、operator+(std::string, std::string)
を定義してstd::string_helper
を返すように仲間のプログラマーが強調していました。
このオブジェクトの非常に重要な役割は、実際の連結をstd::string
にキャストされた瞬間に延期することです。明らかに、operator+(std::string_helper, std::string)
は、同じヘルパーを返すように定義されています。これは、実行する追加の連結があるということを「覚えておく」でしょう。
このような動作は、n-1個の一時オブジェクトを作成し、バッファを割り当て、コピーするなどのCPUコストを節約します。任意の欠点または制限。
最も明白な欠点は複雑さです。 – PlasmaHH
C++ 11では、値はrvalue参照のおかげで再利用できます。 – avakar
@PlasmaHH:複雑さはユーザーから隠されているので、特に悪くはありません。主な欠点は、 'std :: string'からの暗黙の変換に依存する既存のコードを壊す、暗黙的なユーザー定義の型変換を導入することです。 –