关于static 静态存储类

c++primer plus 427页读书笔记。

静态存储类。静态成员有一个特点:无论创建了多少对象,程序都会只创建一个静态变量副本(即使是在循环中,静态的初始化语句也只在第一次生效),也就是说类的所有对象共享一个静态成员。

在程序12.1,和程序12.2中我们可以看到,static int  num_strings;只在了头文件中进行了声明,在方法文件中初始化, int StringBad::num _strings = 0;(这里不用写static,基类型在int在最前面,),那么为什么要把生命和初始化分开放呢?

  因为:在绝大部分情况下不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但不分配内存。对于静态类成员,可以在类声明之外使用单独的语句来进行初始化,这是因为因为静态类成员是单独存储的,而不是对象的组成部分。这里需要注意的是,初始化语句指出了类型,并使用了作用域运算符::,但没有用关键字static。

  初始化是在方法文件中,而不是在类声明文件中进行的,这是因为类生命位于头文件中,程序将头文件包括在其他几个文件中。如果在头文件进行初始化,将出现多个初始化语句副本,从而引发错误。

  但是有一种例情况,静态成员为const int 类型或者枚举类型(枚举类型的单个与const int 等价)。

静态数据成员在类声明中声明,在包含类方法的文件中初始化。初始化使用作用域运算符来指出静态成员所属的类。但如果静态成员是const int 或者 enum,则可以在类声明中初始化。

猜你喜欢

转载自www.cnblogs.com/syne-cllf/p/9241642.html
今日推荐