gpt4 book ai didi

c++ - 为什么 const 成员函数可以修改静态数据成员?

转载 作者:IT老高 更新时间:2023-10-28 12:02:06 30 4
gpt4 key购买 nike

在以下 C++ 程序中,从 const 函数修改 静态数据成员 工作正常:

class A 
{
public:
static int a; // static data member

void set() const
{
a = 10;
}
};

但是从 const 函数修改 非静态数据成员 不起作用:

class A 
{
public:
int a; // non-static data member

void set() const
{
a = 10;
}
};

为什么 const 成员函数可以修改 static 数据成员?

最佳答案

这是规则,仅此而已。并且有充分的理由。

成员函数上的 const 限定符意味着您不能修改非mutablestatic 类成员变量。

通过提供一些合理化,const 限定成员函数中的 this 指针是 const 类型,而 this 本质上与一个类的 instance 相关。 static 成员与类实例无关。您不需要实例来修改 static 成员:在您的情况下,您可以通过编写 A::a = 10; 来做到这一点。

因此,在第一种情况下,将 a = 10; 视为 A::a = 10; 的简写,在第二种情况下,将其视为this->a = 10; 的简写,因为 this 的类型是 const A*,所以不可编译。

关于c++ - 为什么 const 成员函数可以修改静态数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43936404/

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