1.静态成员变量
在类内部声明,在外部定义并初始化。由于类外部通常都是全局区,如果未初始化存于BSS段,由编译器编译阶段全部初始化为0
class A { static int m_a; }; int A::m_a = 10;
且static成员依然受防控属性控制,此处默认private则只有在全局初始化时可以访问,在其他A外无法访问。
2.常成员变量
在类内部定义,并且只能在构造函数的初始化表中进行初始化。
class A { A(int a):m_a(a){} const int m_a; };
非常成员变量要想在常成员函数中进行修改,需要使用mutable修饰。
3.常静态成员变量
只能在类内部定义时初始化。
class A { static const int m_a = 20; };