如何在课堂上进行多次类型转换重载

时间:2017-06-24 13:05:24

标签: c++

类型转换重载是如何工作的? 在以下示例中,类test中存在两个类型转换重载。 在visual studio 2008中,它始终调用int版本,但如果没有int则会调用char版本。它如何决定调用哪一个?

甚至建议在同一个班级中进行这种模糊的重载?

class test
{
public:
    int a;
    test():a(2){}
    operator char()
    {
        return 'c';
    }
    operator int()
    {
        return 2;
    }

};
int main()
{
    test obj;
    cout<<obj;

    return 0;
}

1 个答案:

答案 0 :(得分:0)

好吧,通常如果你提供了多个隐式转换运算符,那么如果目标函数有多个重载,那么你应该明确转换。在某些情况下,您可能希望进行一些转化explicit

在大多数情况下,我会说最好的解决方案是在这种情况下使用临时变量。例如:

char c = test; // or even better  char c { test };
cout << c;

这种过度演员的主要优点是确保所需的转换可用。

我已经使用转换运算符进行了一些测试,我认为VC有时会使用不应该允许的转换运算符。例如,

char c { test }; 
即使我删除了转换为char运算符,

也会用VC编译。我认为应该给出一个缩小的转换错误。它确实适用于像

这样的小事
int x = 345;
char c { x }; // An error as expected

如果您愿意,也可以使用static_cast进行转化。