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;
};