我在这里看到了多个回答问题,关于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对象。此外,在第二次调用时,它成功更改了此对象。感谢。
答案 0 :(得分:3)
所以
const
函数成功更改了Child对象。此外,在第二次调用时,它成功更改了此对象。
这两个电话都没有更改this
。程序结束时c.content
仍为10
。成员函数的const
限定只会阻止您修改类实例本身的非mutable
,非static
成员。但是你没有这样做 - 你正在修改本地static
的成员。这不是const
资格所承诺的,而且正如您在计划中所观察到的那样,完全合法。