这可能是一个愚蠢的疑问,但是我无法理解为什么当我允许定义它时为什么不能在类外部访问私有静态数据成员。
例如:在以下代码中:
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
,static是使用初始化的,因此是多余的)。您只能在实现.cpp文件中执行一次此操作。这样,每个人都可以实例化您的类而没有任何链接程序问题。请注意,您无法再次执行此操作,即以后分配foo::A = 42;
将无法编译,因此您不会违反任何访问规则。您必须显式分配存储的事实是一种语言规则,我认为这会造成更多混乱(我将让编译器在声明静态时自动分配存储)。
因此,总而言之,被允许定义一个私有成员并不像以后能够访问/修改它那样危险,并且与后者大不相同。一旦成员分配了存储空间,该对象就已经被外界密封。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句