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

使用转换运算符消除const与非const对象的代码重复

合并const与非const成员函数的实现方案

原代码里有两个逻辑完全重复的sum成员函数,分别对应const对象和非const对象的调用场景。我们可以通过类型转换复用const版本的实现,消除代码重复,具体写法如下:

class nums
{
public:
    // 仅保留const版本作为核心逻辑实现
    int sum(int a, int b) const
    {
        return a + b;
    }

    // 非const版本通过转换为const对象复用核心逻辑
    int sum(int a, int b)
    {
        // 将当前非const对象转为const引用,调用const版本的sum
        return static_cast<const nums&>(*this).sum(a, b);
    }
};

int main()
{
    const nums a;
    a.sum(5,10);
    nums b;
    b.sum(1,2);
}

实现说明:

  • 只保留带const修饰的sum函数,把核心计算逻辑放在这里,避免代码冗余。
  • 非const版本的sum通过static_cast<const nums&>(*this)完成类型转换,让非const对象以const身份调用已有的核心实现,无需重复写计算代码。
  • 原main函数不需要做任何修改,const对象a直接调用const版本,非const对象b调用非const版本后会自动转发到核心逻辑,功能和原代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:40:19