如何对自定义对象使用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以避免意外投射。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...