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 警告。
使用 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 警告。