gpt4 book ai didi

c++ - 如何在类中进行多个类型转换重载

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:43 26 4
gpt4 key购买 nike

类型转换重载究竟是如何工作的?在下面的示例中,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;
}

最佳答案

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

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

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 进行转换。

关于c++ - 如何在类中进行多个类型转换重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44736712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com