我被告知不要比较字符串如string1< string2因为某些编译器不能正常工作。有没有理由在!=,==,<,< =,>,> =运算符上使用compare()?
答案 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(),因为他们分享(大部分)他们的优点和缺点......