van*_*nna 2 c++ const const-correctness mutable const-cast
这是我的问题.我创建了一个类,其成员函数声明为const使用我无法修改的外部函数(在其他人的代码中声明)并且未声明const.更确切地说
class B {
public:
void foo();
};
Run Code Online (Sandbox Code Playgroud)
class A : public B {
public:
void bar() const {
this->foo();
}
};
Run Code Online (Sandbox Code Playgroud)
我知道对于成员数据,我们可以使用mutable或强制const正确性const_cast.我怎么能'破解' foo这样我的编译器才能理解我想使用它就好像它是const一样,即使它没有在别人的代码中声明它?
不要这样做.
不要这样做:
例:
class A : public B {
public:
void bar() const {
const_cast<B*>(static_cast<const B*>(this))->foo();
}
};
Run Code Online (Sandbox Code Playgroud)
编辑:有效的用例是:
B::foo() 不会修改状态,并且可以声明const,但是......B::foo()忘记宣布它为const,并且......理论上这不可能发生,但在实践中它有时会发生.
更好的答案,因为其他应答者已经正确地说,是已经B::foo()固定的,或者提供一个备用功能,做同样的事情被声明为const.