如何解决如何对自定义对象使用static_cast?
我正在尝试使用看似简单的static_cast
,但我不知道自己在做什么错。我有Rat类(用于表示有理数),我想将其转换为double。然后我可以做double x = Rat(2,3)
(它将2/3存储到x中)。
为此,我需要进行static_cast,所以我尝试了double x = static_cast<double>(Rat(2,3))
,但收到了错误消息Cannot convert Rat to double without a conversion operator
。
如何解决我的问题?
解决方法
仅当转换类型与转换类型相关联时,或者在编译器知道如何执行转换时,才可以使用static_cast
。
没有转换运算符就无法将Rat转换为double
告诉您Rat
没有转换运算符,它不允许编译器将其强制转换为double
。
转换运算符的外观如下:
struct Rat {
// …
operator double() const {
// … perform a conversion to double …
}
// …
}
取决于是否要允许隐式转换,需要在explicit
前面添加operator
。
没有explicit
,您可以编写:
double x = Rat(2,3);
使用explicit
,您需要强制转换:
double x = static_cast<double>(Rat(2,3));
通常最好使用explicit
以避免意外投射。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。