Lint更喜欢std:string而不是clear()的erase()方法

时间:2015-03-03 13:32:12

标签: c++ string std

重复使用Lint对象使用std字符串上的clear,并希望建议使用不带参数的erase方法。

查看文档,同时执行我想要的操作,即将字符串的大小调整为零元素,以便字符串为空,没有元素。我不想在此时删除字符串,只需从中删除所有成员。

我的问题是这两种方法有什么区别,有没有人知道我应该在清除方法上使用擦除的原因?

2 个答案:

答案 0 :(得分:4)

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

通用编程规则是“写下你的意思”。如果要清除整个字符串,请使用以下函数:clear()

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

答案 1 :(得分:2)

这听起来像Lint只是对事情过于挑剔。实际上,在C ++ 11中,clear被定义为noexcept,而erase仅具有强大的异常保证。 clear也有更清晰的语义;使用erase时,无论是谁在阅读代码,都必须检查正在删除的范围; clear没有歧义。

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