c++ - 如何将 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
。
我该如何解决我的问题?
解决方案
只有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
是首选,以避免意外投射。
推荐阅读
- javascript - Chart.js - 向折线图背景添加渐变
- python - 未找到 Ubuntu 命令“pip”,但有 18 个类似的命令(熊猫)重新安装正常工作
- node.js - EC2 实例更改了公共 IP 地址。我可以重新找回旧的 IP 地址吗?
- python - 将抓取的数据转换/清理为熊猫数据框 python
- ios - 使用单视图控制器添加和编辑数据?
- json - 无法使用 jolt 将 json 列表转换为对象
- php - 如何使用 Cakephp 4 访问 REST 控制器
- r - 访问嵌套列表中的数据框
- php - 显示数据库中的图像?
- python - 我如何在python中打印没有\ n的文本文件