在C++中以有效的方式比较字符串的方法

sky*_*oor 14 c++ string

将字符串与另一个字符串或字符串文字进行比较是否有效?

string a;
string b;
if (a == "test")
Run Code Online (Sandbox Code Playgroud)

要么

if (a == b)
Run Code Online (Sandbox Code Playgroud)

我的同事让我使用memcmp

对此有何评论?

谢谢.

Bri*_*ndy 42

是的a == b,请不要听你的同事.

您应该总是更喜欢代码可读性并使用STL而不是使用C函数,除非您的程序中存在需要优化的特定瓶颈,并且您已经证明它确实是一个瓶颈.


ice*_*ime 17

显然你应该使用a == b并依赖它的实现.

为了记录,std::char_traits<char>::compare()在一个流行的实现依赖memcmp(),所以直接调用它只会更痛苦和容易出错.


Bjö*_*lex 9

如果你真的需要知道,你应该编写一个测试应用程序,看看时间是什么.

话虽这么说,你应该依靠提供的实现非常有效.通常是.


ste*_*anv 9

我认为你的同事有点迷恋可能的优化.

  • memcmp不是为了比较字符串(即strcmp)
  • 为了只比较最短字符串的大小,你需要在两个字符串上使用strlen
  • memcmp返回<0,= 0,> 0,这是一个永远记住的麻烦
  • strcmp和strlen会导致错误的c风格字符串出现奇怪的行为(不以\ 0或null结尾)


MSa*_*ers 7

它的效率较低.std::string::operator==可以做一个非常快速的检查,等长.如果刺痛长度不相等(很常见),它可以返回false而不会看到一个角色.

在C中,memcmp必须告诉要比较的长度,这意味着你需要调用strlen两次,并查看两个字符串中的所有字符.