为什么我不能在比较中使用cast操作符?

时间:2012-01-25 05:29:41

标签: c++ typecast-operator

假设以下代码:

#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;
}

首先,我将对象aint变量进行比较。然后,我尝试将它与string变量进行比较,但是要编译的程序文件。随着包含比较的行被注释掉,它编译得很好。有什么问题?

1 个答案:

答案 0 :(得分:1)

您为班级提供了转化运算符int以及std::string
这可以确保适当的转换 但是,要使==生效,所比较的类型必须定义== 该语言为==类型提供了隐式int,但为==提供了std::string运算符重载,因此错误。