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

Is there any difference between the different methods of clearing the contents of a string variable?

本文关键字:之间 什么 区别 方法 变量 字符串 清除      更新时间:2023-10-16

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

string s = "Hello";

以下清除内容的方法有什么区别(性能、问题)吗?:

s = ""

s = std::string()

s.clear()

我从这个关于清除变量https://stackoverflow.com/a/11617595/1228532

的问题的答案中获得了示例代码

有一些明显的区别。

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

s=""s = std::string()创建一个全新的(空)字符串,将其值赋给现有字符串,并丢弃现有字符串的内容。特别是如果您使用的std::string实现不包括短字符串优化,这可能比clear慢得多。雪上加霜的是,这还意味着如果您向字符串中添加更多的数据,它最终将重新分配缓冲区,从一个很小的缓冲区开始,随着字符串的增长,它可能不得不重新分配缓冲区。

底线:clear通常会更快,更不用说给出一个…清晰表达你的真实意图