私有静态声明和后续初始化

时间:2012-07-11 04:21:02

标签: c++ types static initialization access-modifiers

.cpp文件有一堆类定义。一个类具有私有静态成员,如下所示:

class SomeClass:public SomeParentClass
{
   private:
     static int count;
};

并且在定义类之后,count属性初始化为零,如下所示:

int SomeClass::count = 0;

来自Java / C#世界我无法理解count初始化为零的哪一点?是SomeClass实例化的时候吗?此外,类定义的count类型为int,为什么SomeClass::count必须在其前面有int

我的最后一个问题是,因为count属性是私有的,所以当它在类定义之外初始化时,它的可见性不应受到限制吗?

谢谢

3 个答案:

答案 0 :(得分:4)

  1. 在您的计划启动时,该类的静态成员已初始化in arbitrary order
  2. 类中的static int count;是静态变量的声明,而int SomeClass::count = 0;定义。 C ++中的所有定义都需要指定类型。
  3. 计数的定义似乎发生在文件范围内,SomeClass::count的实际范围仍然是私有的,如声明的那样。

答案 1 :(得分:3)

类静态变量的行为就像程序启动时初始化为0一样。它独立于类实例化。

C ++语言需要在声明中的标识符之前使用类型。

初始化类静态变量的C ++语法使它看起来像全局变量,但在编译期间强制访问变量。

答案 2 :(得分:3)

Is it when the SomeClass is instantiated?

不,您可以在任何实例化之前通过SomeClass::count(假设该函数对SomeClass的私有成员拥有权限)访问它。在开始制作对象之前它是完全可用的。


Why does the SomeClass::count has to have an int in front of it?

好吧,因为它是int。想想你何时制作函数原型和定义:

int func (int);
int func (int i) {return 1;} //you still need the int and (int i) here
func {return 1;} //NOT VALID - this is what count would be without int

Since the count attribute is private shouldn't its visibility be   
restricted when it is initialized outside the class definition?

根据this answer,以正常方式定义时,静态变量定义是访问说明符的例外。