感觉类静态成员变量这里初始化的位置略混乱,在这整理下

静态成员是单独存储的,不是对象的组成部分。

静态成员变量

不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存。

1
2
3
4
5
6
class StringBad
{
private:
static int num_strings;
...
};

静态成员变量是在方法文件中进行初始化,若刚在头文件中初始化会造成多个初始化语句引发错误。

1
2
3
4
// 类方法定义的文件中
include "string_bad.h"
// 初始化静态成员函数
int StringBad::num_string = 0;

初始化语句指出了变量类型,并使用了作用于运算符::,但没有使用关键字static

例外

当静态成员变量是const整数类型或者枚举类型时,是可以在类声明中进行初始化的,

1
2
3
4
5
6
class StringBad 
{
private:
static const int LEN = 10;
enum Mode {UP, LOW};
};

总结:
  • 静态数据成员在类声明中声明,在包含类方法的文件中进行初始化。初始化的时候使用作用域运算符来指出静态成员所属的类
  • 但如果静态成员是const或是枚举类型,则可以在类声明中进行初始化。
  • Comments

    2016-02-28