Lint更喜欢在std:string上使用erase()方法,而不是clear()方法
Lint prefers erase() method on std:string rather than clear()
使用Lint时,它反复反对在std字符串上使用clear,并希望建议使用不带参数的擦除方法。
查看文档时,我想做什么就做什么,也就是将字符串大小调整为零元素,这样字符串就为空,没有元素。我不想在这一点上删除字符串,只是从中删除所有成员
我的问题是这两种方法之间的区别是什么?有人知道我应该使用擦除而不是清除方法的原因吗?
我看不出任何原因。恰恰相反:我实际上必须查看引用,看看是否可以在没有参数的情况下调用erase()
。erase()
用于从字符串中删除某些指定字符。clear()
用于删除字符串的全部内容(但不删除其容量)。
一般的编程规则是"写你的意思"。如果你想清除整个字符串,请使用函数clear()
。
此外,在一般情况下,erase()
还有更多的工作要做;它必须检查索引是否在范围内,如果不在范围内则抛出异常。clear()
保证不投掷。聪明的优化器可能会使它们完全相同,但我会考虑使用erase()
,而不是clear()
"过早"的悲观化。
这听起来像是Lint对事物过于挑剔。事实上,在C++11中,clear
被定义为noexcept
,而erase
只有一个强大的异常保证。CCD_ 12也具有更清晰的语义;使用erase
,读取代码的人必须检查正在擦除的范围;与CCD_ 14没有歧义。
在这种情况下,我会忽略/禁用Lint警告。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- 为什么 std::string_view 没有 assign() 和 clear() 方法?
- c++创建新的LinkedList类:Clear()方法指针被释放未分配
- Lint更喜欢在std:string上使用erase()方法,而不是clear()方法
- c++ 中向量的 clear() 和 erase() 方法之间的区别
- 为什么'clear'方法可以将" "分配给 std::string?
- STL 容器调用的 Clear() 方法是否删除堆对象