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

时间:2011-09-12 15:40:32

标签: c++ function const member

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

#include <iostream>

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

int main()
{
}

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:4)

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

这是

之间的区别
X* const cannot_change_pointer;  //this is how top-level const applies to pointers
const X* cannot_change_pointee;

更有意思的是,由于同样的原因,方法上的const对引用成员没有任何影响(const方法只会阻止你引用引用无论如何都无法通过引用完成的其他内容)

答案 2 :(得分:0)

这似乎完全没问题。对foo的调用不会修改ptr成员。因此,foo的常量得到尊重。

我的2美分