c++里初始化静态、非静态,const以及引用的数据成员各不相同
静态成员初始化
class a
{
private:
static int i1 = 1; //错误
static int i2; //应该这么做
static const int i3 =2; //正确
int i4 = 1; //正确
};
int a::i2 = 1; //在这里定义
总结一下,在类里面的静态数据成员,只有常量可以在类内定义,非常量的静态数据成员统一都在类内声明,类外定义
声明只是告诉编译器他的类型,定义时才分配内存空间
因为静态成员是类级别的,不是对象级别的,它的生存周期和源程序等同,为类所有的对象共享,所以如果在类里面就能定义分配内存空间,那么每一个对象被创建时都会分配一次内存,显然是不合理的,所以就放在类外,只分配一次内存空间
而至于常量静态数据成员,编译器知道他是一个常量,不会发生改变,所以可以在类内定义初始化
(小知识:一个变量只有可以拥有类外定义的情况下,才能被获得地址)
const以及引用类型
class a
{
private:
int i1;
const int &i2;
int &i3;
const int i4;
public:
a(int tmp) : i2(tmp), i3(tmp), i4(tmp) {}
};
初始化const以及引用类型的数据成员的唯一机会就是通过构造函数初始值