gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:33 27 4
gpt4 key购买 nike

我在这里看到了多个关于 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 对象。此外,在第二次调用时,它成功地更改了 this 对象。谢谢。

最佳答案

So const function successfully changed Child object. Moreover, on the second call it successfully changed this object.

这两个调用都没有改变这个c.content 在程序结束时保持 10。成员函数的 const 限定只是防止您修改类实例本身的非 mutable、非 static 成员。但您并没有这样做——您正在修改本地 static 的成员。这不是 const 资格所 promise 的,正如您在程序中观察到的那样,这是完全合法的。

关于c++ - const 成员函数修改自己类的静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com