Lint更喜欢在std:string上使用erase()方法,而不是clear()方法

Lint prefers erase() method on std:string rather than clear()

本文关键字:方法 clear erase std 更喜欢 string Lint      更新时间:2023-10-16

使用Lint时,它反复反对在std字符串上使用clear,并希望建议使用不带参数的擦除方法。

查看文档时,我想做什么就做什么,也就是将字符串大小调整为零元素,这样字符串就为空,没有元素。我不想在这一点上删除字符串,只是从中删除所有成员

我的问题是这两种方法之间的区别是什么?有人知道我应该使用擦除而不是清除方法的原因吗?

我看不出任何原因。恰恰相反:我实际上必须查看引用,看看是否可以在没有参数的情况下调用erase()erase()用于从字符串中删除某些指定字符clear()用于删除字符串的全部内容(但不删除其容量)。

一般的编程规则是"写你的意思"。如果你想清除整个字符串,请使用函数clear()

此外,在一般情况下,erase()还有更多的工作要做;它必须检查索引是否在范围内,如果不在范围内则抛出异常。clear()保证不投掷。聪明的优化器可能会使它们完全相同,但我会考虑使用erase(),而不是clear()"过早"的悲观化。

这听起来像是Lint对事物过于挑剔。事实上,在C++11中,clear被定义为noexcept,而erase只有一个强大的异常保证。CCD_ 12也具有更清晰的语义;使用erase,读取代码的人必须检查正在擦除的范围;与CCD_ 14没有歧义。

在这种情况下,我会忽略/禁用Lint警告。