Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 清除字符串变量内容的不同方法之间有什么区别吗?_C++ - Fatal编程技术网

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

C++ 清除字符串变量内容的不同方法之间有什么区别吗?,c++,C++,给定设置为某个值的字符串变量: string s=“你好” 以下清除内容的方法之间是否存在任何差异(性能、gotchas) s=”“ s=std::string() s.clear() 我从这个关于清除变量的问题的答案中得到了示例代码。有一些明显的区别 clear将字符串长度设置为0,但不更改其容量 s=”“或s=std::string()创建一个全新(空)字符串,将其值分配给现有字符串,并丢弃现有字符串的内容。特别是如果您使用的是不包括短字符串优化的std::string实现,这可能比clea

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

string s=“你好”

以下清除内容的方法之间是否存在任何差异(性能、gotchas)

s=”“

s=std::string()

s.clear()


我从这个关于清除变量的问题的答案中得到了示例代码。有一些明显的区别

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

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


一句话:
clear
通常会更快,更不用说清楚地表达您的真实意图了。

虽然3的代码可能不同,但我看不出它们之间的性能差异或特殊缺陷。这取决于您是想保留分配的内存还是放弃分配的内存,同样。我认为规则应该是,如果一个类提供了一个合理定义的clear/truncate/etc方法,那么它应该比任何涉及赋值/临时性/复制者之类的方法都更可取。这是一个很好的观点,我会记住这一点