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

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

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

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

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

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

一般的编程规则是"write what you mean."如果要清除整个字符串,使用函数:clear().

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

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

没有歧义

在这种情况下,我会 ignore/disable Lint 警告。