回答:
個人的には、同じ文字列ストリームにストリーミングしたり、同じストリングストリームからストリーミングしたりすることは非常にまれです。
通常、文字列からストリームを初期化してから解析する必要があります。または、文字列ストリームにストリームしてから、結果を抽出して保存します。
同じストリームとの間でストリーミングを行う場合は、ストリームの状態とストリームの位置に十分注意する必要があります。
「ただ」istringstream
以上を使用ostringstream
すると意図が表現され、<<
vs を誤って使用するなどの愚かな間違いをチェックできます>>
。
そこかもしれないいくつかのパフォーマンスの改善をすることが、私は、最初のを見ていられないでしょう。
あなたが書いたことには何の問題もありません。十分に機能しない場合は、他のアプローチをプロファイリングできます。それ以外の場合は、最も明確な方法を使用できます。個人的には、私は次のように行きます:
std::string stHehe( "Hello stackoverflow.com!" );
A stringstream
はやや大きく、パフォーマンスがわずかに低下する可能性があります-多重継承では、vtableポインターの調整が必要になる場合があります。主な違いは、(少なくとも理論的には)意図をより適切に表現し、意図した>>
場所<<
(またはその逆)を誤って使用しないようにすることです。OTOH、違いは十分に小さいので、特にデモンストレーションコードの短いビットなどでは、私は怠惰でちょうど使用しますstringstream
。私はかなり私が誤って使用された最後の時間を思い出すことができない<<
私が意図したときに>>
(あなたがいる場合、特に以来そう私には安全性のビットはほとんど理論的なようで、やるなミスをし、それはほとんど常にだろう本当にほとんどすぐに明らかに)。
文字列を使用するだけで問題はありません。文字列を組み合わせるだけの場合は、簡単で問題なく動作します。ただし、他の種類のデータをフォーマットする場合は、aでstringstream
サポートされ、文字列ではほとんどサポートされません。
ほとんどの場合、同じ文字列ストリームで入力と出力の両方が必要になることはないので、を使用std::ostringstream
してstd::istringstream
明示的に意図を明確にします。また、誤った演算子(<<
vs >>
)を誤って入力することも防ぎます。
同じストリームで両方の操作を行う必要がある場合は、明らかに汎用バージョンを使用します。
ここでは、パフォーマンスの問題が最も心配されることはありません。明確さが主な利点です。
最後に、純粋な文字列を作成する必要があるため、文字列追加を使用しても何も問題はありません。perlなどの言語のように、それを使って数値を結合することはできません。
おそらく、挿入のみまたは抽出のみが操作に適している場合、 'i'または 'o'プレフィックスバージョンのいずれかを使用して、不要な操作を除外できます。
それが重要でない場合は、I / Oバージョンを使用できます。
表示している文字列の連結は完全に有効です。文字列を使用した連結は可能ですが、それは文字列ストリームの最も有用な機能ではありません。これは、PODおよび抽象データ型を挿入および抽出できるようにすることです。
std :: ostringstream :: str()は、ストリームのコンテンツのコピーを作成します。これにより、状況によってはメモリ使用量が2倍になります。これを回避するには、代わりにstd :: stringstreamおよびそのrdbuf()関数を使用できます。
詳細はこちら:ostringstreamを直接coutに書き込む方法