2011-10-26 10 views
2

だから私はa += b;が実際にa = a + b;であることに気づいた。 abを文字列に置き換えてみてください。a = b + aのショートカット。

a = b + a;のショートカットはありますか?私はa =+ b;を試しましたが、それはうまくいかないようです。

+0

いいえこのようなショートカットはありません。 –

+1

文字列連結に '+'を使用していますか?あなたが追加のためにそれを使用しているならば、追加は可換的であるので問題ではありません。 –

+0

@PeterOlson:はい、明らかです。 :) – Randomblue

答えて

2

std :: stringの場合、operator+=は、引数を変更して参照を返すlhs引き数に対して実行される演算子です。文字列の場合operator+は「追加」を意味するため、他の方法でこのような演算子を使用する可能性はありません。

これは最初は厄介な制限のようですが、実際にはそれにはかなりの理由があります。 std :: stringは、ベクトルやその他の動的フィールドと同じように、より多くのメモリを動的に割り当てます。 ( - >一定の償却された複雑さ)。この操作は、常に最後にメモリを割り当てます。したがって、文字列の先頭に何かを追加したい場合は、実際には新しい接頭辞になる引数を変更するか、まったく新しい文字列を作成する必要があります。

operator+=は、結果の文字列の前に付けるオブジェクトを変更する必要があります。とにかく、全く新しいオブジェクト(メモリ割り当てと両方の引数を完全にコピーする)を暗黙的に作成するべきではありません。 b = a + bのようなものをご希望の場合は、bは今度はという文字列を新たに運ぶことを意味します。それは新鮮な割り当てです。一方、operator+=の場合、は、の左側の引数を変更します。

+0

+1のためにはまだ、 a = b + a; ':) – WTK

6

a = b + aは、数字を扱う場合はa = a + bと同じことを意味します。文字列の場合、同様のショートカットはありません。

+1

aとbが文字列でない場合! :) – WTK

+1

文字列の '+'は連結性であり、可換性はありません。 – davin

+0

@WTK:はい、私はOPが私の答えを投稿した直後に文字列を話していることに気付きました。更新しました。 ) – Kaivosukeltaja

0

a = b + a(文字列を扱うとき)という短い方法はないと思います。

+1

'a = b + a'は 'a = b + a'よりも短い – ajax333221

+0

母はそこにポイントを持っていると思います:) – WTK

関連する問題