c++类里初始化各种类型的数据成员

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以及引用类型的数据成员的唯一机会就是通过构造函数初始值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值