如何将 static_cast 与自定义对象一起使用?

How to use static_cast with a custom object?

我正在尝试使用看似简单但我无法弄清楚我做错了什么的static_cast。我有 class Rat(用于表示有理数),我想将其转换为双精度数。然后我可以做 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

Cannot convert Rat to double without a conversion operator

告诉你 Rat 没有允许编译器将其转换为 double 的转换运算符。

转换运算符看起来像这样:

struct Rat {
 // …
 operator double() const { 
    // … perform a conversion to double …
 }
 // …
}

根据是否允许隐式转换,需要在operator前加上explicit

没有explicit你可以写:

double x = Rat(2,3);

有了 explicit 你需要演员表:

double x = static_cast<double>(Rat(2,3));

通常首选 explicit,以避免意外转换。