为什么要对字符串使用compare()?

时间:2016-04-12 20:28:16

标签: c++ string

我被告知不要比较字符串如string1< string2因为某些编译器不能正常工作。有没有理由在!=,==,<,< =,>,> =运算符上使用compare()?

2 个答案:

答案 0 :(得分:3)

“某些编译器无法正常工作”的想法很荒谬。

如果您通过char*指针比较C风格的字符串,那么=!=<=,...运算符会比较指针,而不是他们指向的字符串。在这种情况下,请改用strcmp()函数。但是既然你问的是compare函数,你显然不会问C风格的字符串,而是关于C ++风格的std::string对象。

如果您要比较std :: string对象,则相等和比较运算符将正常工作。任何导致它们失败的运行时库错误都会在实现出门之前被捕获。

compare功能提供了更多功能。具体来说,它允许您指定要比较的其中一个字符串的子字符串,而不是整个字符串。

阅读文档(例如,this page上的cppreference.com)并确定是否需要增加的功能。如果不这样做,那么==上的!=<=<>=>std::string运营商对象会工作得很好。他们的行为实际上是根据compare()函数定义的。

还有一些特定于语言环境的问题,但您可能没有必要关注那些问题。

答案 1 :(得分:0)

如用户注释here,如果使用==,还有2-3个操作。但如果你能把它当成一个小问题,这是一个很小的问题。

但是compare()有一些可能是真正的问题 - 如果字符串相等则返回0,这可能会非常混乱,而且这个运算符需要更长的代码。

所以,唯一的缺点是可读性,这可能是一种痛苦,所以我不建议使用compare(),因为他们分享(大部分)他们的优点和缺点......