You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何重载的+运算符无法适配基本类型static_cast至类对象的场景?

问题分析与解决方案

错误根源

你定义的operator+参数是非const左值引用(bMoney &other),但static_cast<bMoney>(ld)会生成一个临时bMoney对象——C++语法规则禁止临时对象绑定到非const的左值引用,因此编译器找不到匹配的operator+重载,直接报错。

修复方案

把运算符重载的参数改成const bMoney &other,利用const左值引用可以绑定临时对象的特性解决问题。修改后的类原型如下:

class bMoney {
  private:
    long double money;
    
  public:
    explicit bMoney(long double _money = 0.0L) noexcept : money(_money) {};

    // 将参数改为const引用
    bMoney operator+(const bMoney &other) const;
    bMoney operator-(const bMoney &other) const;
    bMoney operator*(long double times) const;
    bMoney operator/(long double times) const;
};

修改后,bm1 + static_cast<bMoney>(ld)即可正常编译。

额外说明

  • static_cast<bMoney>(&ld)是错误用法:你把ld的指针(long double*)传给了需要long double的构造函数,类型完全不匹配,自然无效。最初的static_cast<bMoney>(ld)写法是正确的,只需配合const引用参数即可。
  • operator-存在完全相同的问题,必须同步修改参数为const bMoney &,否则类似减法操作也会报错。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:27:28