如何将 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
,以避免意外转换。
我正在尝试使用看似简单但我无法弄清楚我做错了什么的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
,以避免意外转换。