为什么'clear'方法可以将" "分配给 std::string?

Why is there 'clear' method when "" can be assigned to std::string?

本文关键字:std 分配 string clear 方法 为什么      更新时间:2023-10-16

可以使用string::clear函数来清空字符串,也可以使用空双引号 " 来执行此操作。有什么区别?

分配空字符串时,编译器必须在数据部分中存储一个空的 C 字符串,并创建代码以将指向它的指针传递给赋值运算符。然后,赋值运算符必须从数据部分读取,只是为了找出您传递了一个空字符串。

使用clear()编译器只需生成一个没有任何参数的函数调用。数据部分没有空字符串,没有传递指针,没有读取等。

你甚至可能有一个编译器,可以优化它。我不知道有没有,但标准库不能依赖于特定的编译器功能,这不是必需的。

更重要的区别在于表达意图。当您希望代码的读者理解字符串将被清除时,请使用 clear() 。当目的是为字符串分配一个新值时,该值意外地成为空字符串,然后使用赋值运算符。