类型转换重载是如何工作的?
在以下示例中,类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;
}
答案 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
进行转化。