当""可以分配给std :: string时,为什么有'clear'方法?

Ali*_*Osm 4 c++ string clear

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

cdo*_*nat 11

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

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

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

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