【C++面向对象】类的静态数据成员(static修饰)和常数据成员(const修饰)的初始化

  类的常数据成员(由const修饰)必须在构造函数的初始化列表里被初始化,不能在构造函数的函数体中被赋值;

  又因为构造函数可以在类内或类外实现,所以表面上看,常数据成员可在类内初始化,也可在类外初始化。如:

  1. 常数据成员在类外初始化

    1
    2
    3
    4
    5
    6
    7
    8
    class A{
    public:
    A(int i);//构造函数
    private:
    const int a;
    }

    A::A(int i):a(i){ }
  2. 常数据成员在类内初始化

    1
    2
    3
    4
    5
    6
    class A{
    public:
    A(int i):a(i){ };//构造函数
    private:
    const int a;
    }

而静态数据成员(由static修饰)只能在类内声明,类外初始化,如:

1
2
3
4
5
类内:
private:
static int b;
类外:
int "类名"::b = "初始值"

  那么有些童鞋就有疑问了,如果一个类的数据成员既是常数据成员,又是静态数据成员,那么该怎么定义和初始化呢?静态常数据成员(由static const修饰)的初始化方法如下:

1
2
3
4
5
类内:
private:
static const int b;
类外:
const int "类名"::b = "初始值"

  可以看到,初始化的方法和静态数据成员是一样的,所以我觉得static比const高一等级。在static面前,const降到跟int一级,从类外初始化的前缀“const int”也能窥探一二。

————————— 本文结束 感谢您的阅读 —————————
谢谢你请我喝咖啡ლↂ‿‿ↂლ(支付宝扫一扫即可领红包, 消费时可抵现! 你省钱, 我赚钱, 多谢支持~)