清除字符串变量内容的不同方法之间有什么区别吗?

Jam*_*s N 9 c++

给定一个字符串变量设置为某个值:

string s = "Hello";

以下方法之间是否有任何区别(性能,陷阱)以清除内容?:

s = ""

s = std::string()

s.clear()

我从这个答案中得到了关于清除变量的问题的示例代码/sf/answers/813231681/

Jer*_*fin 9

有一些明显的差异.

clear设置字符串为0的长度,但并没有改变其容量.

s=""或者s = std::string()创建一个全新的(空)字符串,将其值分配给现有字符串,并抛弃现有字符串的内容.特别是如果你使用的实现std::string不包括短字符串优化,这可能比它慢得多clear.为了增加对伤害的侮辱,这也意味着如果你向字符串添加更多数据,它将最终从一个微小的缓冲区重新分配缓冲区,它可能需要在字符串增长时重新分配.

底线:clear通常会更快,更不用说明确表达你的真实意图了.