49

の利点の1つは、を定義する任意のタイプからの入力、およびプリミティブタイプからの入力を受け入れることができることstd::stringstreamです。std::istreamoperator<<std::istream

私は使用しませんoperator<<; 代わりに、多くの文字列を連結します。の実装により、多くの文字列を連結std::stringstreamするよりも高速になりますか?std::string

4

1 に答える 1

65

の追加関数がの挿入関数std::stringより遅いと期待する理由はありません。通常、可能なメモリ割り当て/コピーに加えて、メモリへのデータのコピーにすぎません。基本的な呼び出しであっても、ロケールなどを処理する必要があります。stringstreamstd::stringstringstreamwrite

また、std::string最初のメモリ割り当て以外を最小化または排除する方法も提供します。reserve十分なスペースがあれば、すべての挿入はmemcpy. それは実際には不可能stringstreamです。

std::stringの追加関数よりも高速であったとしても、何かを行うには文字列からコピーする必要があります。stringstreamこれは別の割り当て + コピーであり、 では必要ありませんstd::string。少なくとも C++20 は、その特定の必要性を取り除くように設定されているように見えますが。

いくつかの文字列をくっつけるだけでなく、フォーマットstd::stringstreamが必要な場合に使用する必要があります。

于 2013-02-07T00:04:32.223 に答える