问题描述
我正在尝试使用看似简单的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
以避免意外投射。