#include <iostream>
#include <string>
using namespace std;
class Str
{
public:
Str( char* str):p(str){};
bool operator>(Str &str);
char* p;
};
bool Str::operator >(Str &str)
{
return(strcmp(this->p,str.p)>0);//之前此处没有>0符号,strcmp返回值为int类型,而>符号返回bool,所以存在一个隐式转换。导致非零的值都为真
}
int main()
{
Str p1("ABC");
Str p2("DEF");
int i = (p1>p2);
cout << i;
}
这段代码本来是想重载>操作符的,使用strcmp作为比较的准则,但是strcmp返回为1,0,-1分别表示大于、等于、小于,由于>操作符返回值为bool。所以会将所有非零值都认为为真。导致只要p1,p2只要不等就返回1。
错误2:strcmp的返回值问题
最新推荐文章于 2022-10-13 17:47:05 发布