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

时间:2015-10-11 14:07:29

标签: c++

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

string s = "Hello";

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

s = ""

s = std::string()

s.clear()

我从这个答案中得到了关于清除变量https://stackoverflow.com/a/11617595/1228532

的问题的示例代码

1 个答案:

答案 0 :(得分:9)

存在一些明显的差异。

clear将字符串的长度设置为0,但会更改其容量。

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

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