这是我的问题。我使用声明为const
的成员函数创建了一个类,该函数使用了我无法修改的外部函数(在其他人的代码中声明)并且未声明为const
。更确切地说是
class B {
public:
void foo();
};
class A : public B {
public:
void bar() const {
this->foo();
}
};
我知道对于会员数据,我们可以使用mutable
或const_cast
强制使用const正确性。我怎么能
答案 0 :(得分:6)
不要这样做。
不要这样做:
示例:
class A : public B {
public:
void bar() const {
const_cast<B*>(static_cast<const B*>(this))->foo();
}
};
编辑:有效的用例是:
B::foo()
不会修改状态,而可能已声明为const
,但是...... B::foo()
的人忘了宣布它为const,而且...... 理论上说这不可能发生,但在实践中它有时会发生。
正如其他答案者正确说过的那样,更好的答案是修复B::foo()
,或者提供一个替代函数来执行相同的事情 声明为const。
答案 1 :(得分:3)
让你的函数非常量。这是正确的方法。
这表明您将修改您的州。
答案 2 :(得分:1)
使B::foo()
const,或使A::bar()
非const。两个中的一个。
答案 3 :(得分:0)
您可以按如下方式声明bar():
void bar() const {
B *that = (B *) this;
that->foo();
}
不确定任何意外的副作用。