const成员函数修改自己类的静态对象

时间:2016-08-31 23:56:37

标签: c++ inheritance static const

我在这里看到了多个回答问题,关于const成员函数允许修改静态成员。但不确定我的问题是否属于同一类别。在我的示例中,静态成员函数修改类的静态对象,而不是类的静态成员。为什么我的例子有效?

class Base
{
public:
    virtual const Base& fun (const Base& n) const = 0;
};

class Child : public Base
{
    int content;
public:
    Child(int i = 0) : content(i) {}
    const Base& fun (const Base& n) const;
};

const Base& Child::fun (const Base& n) const
{    
    static Child static_child;
    static_child.content = content + static_cast<const Child&>(n).content;
    cout << "static child content is " << static_child.content << endl;
    return static_child;
}

int main() {
    Child c(10);
    Base* b = &c;
    b->fun(*b).fun(*b);
}

输出

static child content is 20
static child content is 30

因此const函数成功更改了Child对象。此外,在第二次调用时,它成功更改了对象。感谢。

1 个答案:

答案 0 :(得分:3)

  

所以const函数成功更改了Child对象。此外,在第二次调用时,它成功更改了对象。

这两个电话都没有更改this。程序结束时c.content仍为10。成员函数的const限定只会阻止您修改类实例本身的非mutable,非static成员。但是你没有这样做 - 你正在修改本地static的成员。这不是const资格所承诺的,而且正如您在计划中所观察到的那样,完全合法。

相关问题