c++ -- operator== vs string::compare() vs strcmp

在stack overflow上看到了这样一个问题:为什么stringoperator==会这么慢? 当然提问者的benchmark程序本身有问题,在编译器优化下已经完全无法测试标题中三个函数的性能了,所以这里不去讨论这个作者得到的结果。

那么,这三个函数到底哪个会快一些呢?

其实,这三个函数最终都是要进行内存的比较的,所以实际上,效率应该是相似的。但是,如果你仅仅是想判断两个 std::string是不是相等的话,operator==可以做的更快。

原因很简单。std::string是会记录字符串长度的。如果仅比较相等关系,就像operator==做的那样,那么实际可以先比较两个std::string是不是一样长。不一样长的std::string一定不会相等,于是operator==其实在很多情况下根本不需要去比较内存!

string::compare()strcmp()就不能这样,他们要给出两个串哪一个更大的结果,所以必须进行内存比较。更何况strcmp()根本拿不到字符串长度信息。

最后,让我们来看一下stdlibc++的operator==吧:

  // operator ==
  /**
   *  @brief  Te
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值