为什么'clear'方法可以将" "分配给 std::string?
Why is there 'clear' method when "" can be assigned to std::string?
可以使用string::clear
函数来清空字符串,也可以使用空双引号 " 来执行此操作。有什么区别?
分配空字符串时,编译器必须在数据部分中存储一个空的 C 字符串,并创建代码以将指向它的指针传递给赋值运算符。然后,赋值运算符必须从数据部分读取,只是为了找出您传递了一个空字符串。
使用clear()
编译器只需生成一个没有任何参数的函数调用。数据部分没有空字符串,没有传递指针,没有读取等。
你甚至可能有一个编译器,可以优化它。我不知道有没有,但标准库不能依赖于特定的编译器功能,这不是必需的。
更重要的区别在于表达意图。当您希望代码的读者理解字符串将被清除时,请使用 clear()
。当目的是为字符串分配一个新值时,该值意外地成为空字符串,然后使用赋值运算符。
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我可以重新分配/覆盖std::字符串吗
- 为什么 std::equal_to会导致动态分配?
- 使 std::vector 分配对齐内存的现代方法
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- C++ 使用枚举类对象分配 std::map 值
- std::元组分配和复制/移动异常保证
- 使用 std::vector 在类中分配索引
- vector是否为std::移动的对象连续分配内存
- std::initializer_list 堆是否分配内存?
- std::p air 会破坏其动态分配的对象吗?
- 在std::线程中使用已分配的结构数据
- 无法使用"std::make_shared"分配指针
- std矢量内存分配linux与windows编译器
- 如何为包含最多N个元素的std::multiset调用最大数量分配
- 如何在 C++11 的内存池中分配 std::map 的内部RB_tree节点?
- 如何使用 std::vector 防止内存重新分配
- 使用 std::map 的递归堆栈分配如何工作?
- 我可以使用std ::分配的分配的原始数组