强制外部函数为const

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一样,即使它没有在别人的代码中声明它?

Ben*_*Ben 6

  1. 不要这样做.

  2. 不要这样做:

例:

class A : public B { 
public: 
    void bar() const { 
        const_cast<B*>(static_cast<const B*>(this))->foo();
    } 
}; 
Run Code Online (Sandbox Code Playgroud)

编辑:有效的用例是:

  1. 该函数B::foo() 不会修改状态,并且可以声明const,但是......
  2. 写的人B::foo()忘记宣布它为const,并且......
  3. 你不能改变它,因为它会打破你无法控制的东西.

理论上这不可能发生,但在实践中它有时会发生.

更好的答案,因为其他应答者已经正确地说,是已经B::foo()固定的,或者提供一个备用功能,做同样的事情声明为const.