Const C ++ DRY策略
为了避免与C ++ const无关的重复,在某些情况下const_cast可以工作,但返回非const的私有const函数不起作用? 在Scott Meyers的有效C ++项目3中,他建议将const_cast与静态强制转换结合使用可以是避免重复代码的有效且安全的方法,例如 const void* Bar::bar(int i) const { ... return variableResultingFromNonTrivialDotDotDotCode; } void* Bar::bar(int i) { return const_cast<void*>(static_cast<const Bar*>(this)->bar(i)); } Meyers继续解释说,让const函数调用非const函数是危险的。 下面的代码是一个反例,显示: 与Meyers的建议相反,有时将const_cast与静态强制转换结合使用是危险的 有时让const函数调用非const的危险性较小 有时两种使用const_cast的方式都可能隐藏有用的编译器错误 避免const_cast并让其他const私有成员返回非const是另一种选择 避免代码重复的const_cast策略中的一种是否被视为良好实践?您愿意使用私有方法策略吗?在某些情况下,const_cast可以工作,但私有方法不能工作吗?还有其他选择(除了重复)吗? 我对const_cast策略的担心是,即使编写时代码正确,以后在维护期间代码也可能变得不正确,并且const_cast将隐藏有用的编译器错误。似乎普通的私有功能通常更安全。 class Foo { public: Foo(const LongLived& constLongLived, LongLived& mutableLongLived) : mConstLongLived(constLongLived), mMutableLongLived(mutableLongLived) {} // case A: we shouldn't …