首页 > 解决方案 > 如何将 static_cast 与自定义对象一起使用?

问题描述

我正在尝试使用static_cast看起来很简单的方法,但我无法弄清楚我做错了什么。我有 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

我该如何解决我的问题?

标签: c++doublestatic-cast

解决方案


只有static_cast当您转换的类型和您转换的类型相关时,或者当编译器知道如何执行该转换时,您才能使用。

没有转换运算符,无法将 Rat 转换为 double

告诉您没有转换运算符Rat允许编译器将其强制转换为double.

转换运算符看起来是这样的:

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

根据您是否要允许隐式转换,您需要explicitoperator.

没有explicit你可以写:

double x = Rat(2,3);

explicit需要一个演员:

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

通常explicit是首选,以避免意外投射。


推荐阅读