2015-10-11 11 views
9

いくつかの値に文字列変数セットを考える:内容をクリアするには、次の方法との差額(パフォーマンス、落とし穴)がある文字列変数の内容をクリアするさまざまな方法に違いはありますか?

string s = "Hello";

を?:

s = ""

s = std::string()

s.clear()

この回答のサンプルコードは、変数のクリアに関する質問にあります。https://stackoverflow.com/a/11617595/1228532

+1

3のコードビハインドは異なるかもしれませんが、私はそれらの間に特別な邪魔になることはありません。 –

+1

割り当てられたメモリを保持するか、それを破棄するかによって異なります。 –

+0

私は、クラスが賢明に定義されたクリア/トランケート/ etcメソッドを提供している場合、それは代入/一時的/コピーラーなどを含むものよりも優先されるべきであるというルールが必要です。 –

答えて

9

いくつかの大きな違いがあります。

clearは、文字列の長さを0に設定しますが、ではなく、の容量を変更します。

s=""またはs = std::string()は、新しい(空の)文字列を作成し、その値を既存の文字列に割り当て、既存の文字列の内容を破棄します。特に短い文字列の最適化を含まないstd::stringの実装を使用している場合、これはclearよりはるかに遅くなる可能性があります。傷害に侮辱を加えるためには、文字列にさらにデータを追加すると、文字列の増加に応じて再割り当てする必要のある小さなバッファからバッファを再割り当てすることになります。

ボトムライン:clearは、実際の意図を明確に表現するだけでなく、しばしば高速になります。

関連する問題