2015-10-11 43 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通常會更快,更不用說給出...明確表達您的真實意圖。

相關問題