使用转换运算符消除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
相关产品推荐
相关产品推荐

