c++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类外初始化,且不能使用static关键字。
那么为什么要这样规定?
首先C++的静态成员是需要初始化的(实际上需要分配一个内存,不一定需要赋值),初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义。
#include <stdio.h>
class A {
public:
static int a; //声明但未定义
};
int A::a = 3; //定义了静态成员变量,同时初始化。也可以写"int A:a;",即不给初值,同样可以通过编译
int main() {
printf("%d", A::a);
return 0;
}
静态成员是单独存储的,并不是对象的组成部分。如果在类的内部进行定义,在建立多个对象时会多次声明和定义该变量的存储位置。 static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。
为了避免与一般静态变量或对象相混淆,在类外初始化,不能使用static关键字。
来源:CSDN
作者:LIEYz
链接:https://blog.csdn.net/qq_18998145/article/details/104032085