这可能是一个愚蠢的疑问,但我无法理解为什么当我被允许定义它时,我无法访问类外的私有静态数据成员。
例如:在以下代码中:
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;
}
答案 0 :(得分:2)
int foo::A = 0;
为成员变量A
分配存储空间,并使用0
对其进行初始化(实际上默认情况下使用0
初始化静态,因此赋值是多余的)。您只在实现.cpp文件中执行此操作一次。然后每个人都可以在没有任何链接器问题的情况下实例化您的类。请注意,您无法再次执行此操作,即稍后分配foo::A = 42;
将无法编译,因此您不会破坏任何访问规则。您必须明确分配存储的事实是一种语言规则,在我看来这会产生更多的混淆(我会在您声明静态时让编译器自动分配存储空间)。
因此,总而言之,允许定义私有成员到目前为止并不像以后访问它/修改它那样危险,并且与后者非常不同。一旦成员分配了存储空间,该对象就已经为外界密封了。