繁体   English   中英

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

[英]How to use static_cast with a custom object?

我正在尝试使用看起来很简单的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

我该如何解决我的问题?

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

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

告诉您Rat没有允许编译器将其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 ,以避免意外强制转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM