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

  类的常数据成员(由const修饰)必须在构造函数的初始化列表里被初始化,不能在构造函数的函数体中被赋值;又因为构造函数可以在类内或类外实现,所以表面上看,常数据成员可在类内初始化,也可在类外初始化。如:

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

class A{
    public:
        A(int i);//构造函数
    private:
        const int a;    
}

A::A(int i):a(i){ }

  2. 常数据成员在类内初始化

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”也能窥探一二。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容