假设以下代码:
#include <string>
#include <iostream>
using namespace std;
struct A
{
operator int()
{
return 123;
}
operator string()
{
return string("abc");
}
};
void main()
{
A a;
cout<<(a==123)<<endl;
//cout<<(a==string("abc"))<<endl;
}
首先,我将对象a
与int
变量进行比较。然后,我尝试将它与string
变量进行比较,但是要编译的程序文件。随着包含比较的行被注释掉,它编译得很好。有什么问题?
答案 0 :(得分:1)
您为班级提供了转化运算符int
以及std::string
,
这可以确保适当的转换
但是,要使==
生效,所比较的类型必须定义==
该语言为==
类型提供了隐式int
,但为==
提供了std::string
运算符重载,因此错误。