为什么我们不允许在没有 public 成员函数的情况下访问 class 之外的私有静态成员?

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

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

例如:在以下代码中:

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初始化它(实际上一个static默认用0初始化,所以赋值是多余的)。您只需在实现 .cpp 文件中执行此操作一次。然后每个人都可以实例化您的 class 而不会出现任何链接器问题。请注意,您不能再次执行此操作,即稍后分配 foo::A = 42; 将不会编译,因此您不会破坏任何访问规则。您必须显式分配存储空间这一事实是一项语言规则,在我看来这会造成更多混乱(我会让编译器在您声明静态时自动分配存储空间)。

因此,总而言之,被允许定义私有成员远不如以后访问 it/modify 危险,并且与后者有很大不同。一旦成员分配了存储空间,对象就已经对外密封。