15

「<<」と「+」の両方を使用して、さまざまな文字列を一緒に出力する人を見てきました。

cout << firstname << lastname << endl;

対:

cout << firstname + lastname << endl;

「<<」を使用した方が良いですか、それともあまり違いはありませんか?

4

3 に答える 3

20

<<その特定の場合に使用する方が良いと思います。そうしないと、連結によって一時的になり、正当な理由もなくメモリが割り当てられる可能性があります。

于 2013-01-17T22:59:15.310 に答える
18

文字列を<<連結すると、貼り付けられた 2 つの文字列のコピーが作成されます。上に追加のメモリを割り当てるかどうかは、C++ ライブラリで文字列がどのように実装されているかの問題ですが、姓と名が「十分に長い」(合わせて 8 ~ 16 文字より大きい) 場合は、メモリを割り当てる可能性が高くなります。 (一時コピーが不要になったら、再度解放します)。

オペレーターは<<比較してオーバーヘッドがほとんどないため、間違いなく優れています。

もちろん、これらのことを何千回も実行しない限り、測定可能な違いが生じることはまずありません。しかし、CPU サイクルを無駄にしないのは良いことです。他の場所でどのように使用できるかはわかりません... ;)

于 2013-01-17T23:10:03.193 に答える
1

カスケード<<はより良い選択です。

パフォーマンスのために、他のテアドが言及したように、オペレーター<<は必ずしも一時オブジェクトを導入するとは限りません。カスケード<<はパイプと見なすことができます。

また+、左側のオペランドがユーザー定義型でない場合、対応するoperator+. 例えば、

cout << "Hello, " << lastname << endl;// Works
cout << "Hello, " + lastname << endl; // This won't work
于 2013-01-17T23:20:47.640 に答える