Ant*_*nio 5 c++ inheritance mutable
出于好奇,
是否有可能派生出父成员mutable?有没有合理的方法修改以下代码并使其编译?(保留foo()方法const而int a不是mutable在父类中声明时保留方法A)
class A {
protected:
int a;
};
class B : public A {
public:
void foo() const {
a = 10;
}
};
Run Code Online (Sandbox Code Playgroud)
小智 6
通常,需要修改一个const值意味着您在其他地方存在需要修复的设计错误......但如果您确实需要,您可以通过 const 强制转换来实现;例如
const_cast<int&>(a) = 10;
Run Code Online (Sandbox Code Playgroud)
鉴于您说您希望将基类本身视为可变的,您可能会考虑在其他地方放弃常量,例如通过创建成员函数
A& hack() const { return const_cast<B&>(*this); }
Run Code Online (Sandbox Code Playgroud)
然后你可以实施foo为
hack().a = 10;
Run Code Online (Sandbox Code Playgroud)
该解决方案的缺点是隐藏了const_cast函数调用的背后,因此您需要某种方法来确保阅读您代码的人知道您正在做一些“邪恶”的事情(例如,通过精心选择的函数名称)。然而,这个版本有一些优点:
A,而不是对 的成员执行此操作B。