为什么不允许我们访问没有公共成员函数的类外私有静态成员?

Why aren't we allowed to access a private static member outside class without public member function?

本文关键字:静态成员 函数 我们 不允许 访问 为什么 成员      更新时间:2023-10-16

这可能是一个愚蠢的疑问,但我不能理解为什么我不能访问类外的私有静态数据成员,当我被允许定义它。

例如:在下面的代码中:

class foo
{
    static int A;
    public:
       int getA{return A;}
};
//This is allowed
int foo:A=0;
int main()
{
   //This gives error
   cout<<foo:A;
}

int foo::A = 0;

为成员变量A分配存储空间,并用0初始化它(实际上静态变量默认是用0初始化的,所以这个赋值是多余的)。您只需在实现.cpp文件中执行一次。然后每个人都可以实例化你的类,而没有任何链接器问题。注意,您不能再这样做了,也就是说,稍后分配foo::A = 42;将不会编译,所以您不会破坏任何访问规则。事实上,你必须显式地分配存储是一个语言规则,在我看来,这会造成更多的混乱(我让编译器在声明静态时自动分配存储)。

因此,综上所述,允许定义私有成员远没有允许以后访问/修改它那么危险,并且与后者有很大不同。一旦成员分配了存储空间,对象就已经对外封闭了。