C++ const成员函数正在修改成员变量

axe*_*axe 12 c++ const function member

今天我发现那样的代码可行.这对我来说听起来很奇怪,因为据我所知,你无法修改const成员函数中的任何成员.你实际上不能直接做,但你可以调用非const成员函数.如果将成员函数标记为const表示传递给函数的指针指向const对象,那么如何在示例下调用非const成员函数?

#include <iostream>

class X
{
public:
    void foo() const
    {
        ptr->bar();
    }
    void bar() {}
private:
    X * ptr;
};

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

qua*_*dev 12

您的成员变量不是X,但指向X.只要foo不修改指针,它就可以const.


Unc*_*ens 5

当你有一个指针成员时,那么该指针在 const 方法中就是 const 。您将无法更改存储在指针中的地址。但你可以随心所欲地改变指尖。

这是之间的区别

X* const cannot_change_pointer;  //this is how top-level const applies to pointers
const X* cannot_change_pointee;
Run Code Online (Sandbox Code Playgroud)

更有趣的是,出于同样的原因,方法上的 const 对引用成员没有任何影响(const 方法只会阻止您引用其他无法通过引用完成的内容)。