在stack overflow上看到了这样一个问题:为什么string的operator==会这么慢? 当然提问者的benchmark程序本身有问题,在编译器优化下已经完全无法测试标题中三个函数的性能了,所以这里不去讨论这个作者得到的结果。
那么,这三个函数到底哪个会快一些呢?
其实,这三个函数最终都是要进行内存的比较的,所以实际上,效率应该是相似的。但是,如果你仅仅是想判断两个 std::string是不是相等的话,operator==可以做的更快。
原因很简单。std::string是会记录字符串长度的。如果仅比较相等关系,就像operator==做的那样,那么实际可以先比较两个std::string是不是一样长。不一样长的std::string一定不会相等,于是operator==其实在很多情况下根本不需要去比较内存!
string::compare()和strcmp()就不能这样,他们要给出两个串哪一个更大的结果,所以必须进行内存比较。更何况strcmp()根本拿不到字符串长度信息。
最后,让我们来看一下stdlibc++的operator==吧:
// operator ==
/**
* @brief Te

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



