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

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

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

  1. 常数据成员在类外初始化
class A{
    public:
        A(int i);//构造函数
    private:
        const int a;    
}

A::A(int i):a(i){ }
  1. 常数据成员在类内初始化
class A{
    public:
        A(int i):a(i){ };//构造函数
    private:
        const int a;    
}

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

类内:
private:
    static int b;
类外:
int "类名"::b = "初始值"

那么有些童鞋就有疑问了,如果一个类的数据成员既是常数据成员,又是静态数据成员,那么该怎么定义和初始化呢?

静态常数据成员(由static const修饰)的初始化方法如下:

类内:
private:
    static const int b;
类外:
const int "类名"::b = "初始值"

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

猜你喜欢

转载自blog.csdn.net/weixin_43971764/article/details/86306903