C++中静态变量、常量、静态整型常量、静态非整型常量、引用变量的初始化方法

C++中静态变量、常量、静态整型常量、静态非整型常量、引用变量的初始化方法

先看一段代码

class CTypeInit{ public: CTypeInit( int c):m_c(c),m_ra(c){ } private: int m_a; //通过初始化列表初始化, //或者构造函数初始化 /*引用*/ int &m_ra; //只能通过初始化列表初始化 /*静态变量*/ static int m_b; //不能通过初始化列表初始化, //不能在类内进行初始化, //不能在构造函数中初始化, //只能在类外初始化 /*常量*/ const int m_c; //只能通过初始化列表初始化, //不能在类内进行初始化, //不能在构造函数中初始化, //不能在类外初始化 /*静态整型常量*/ static const int m_d; //(整型)能否在类中初始化,取决于编译器 // 能在在类外初始化,不能带static /*静态非整型常量*/ static const double m_e;//(double型)能否在类中初始化,取决于编译器 // 能在在类外初始化,不能带static }; //静态成员变量,必须在类外初始化,且要去掉static关键字 int CTypeInit::m_b = 6; const int CTypeInit::m_d = 6; const double CTypeInit::m_e = 3.1415926; int main() { CTypeInit obT(2); return 0; }

总结:根据上述代码,C++中一下5中类型的初始化方法

1、静态变量,只能在类的定义外初始化,不能通过初始化列表初始化,不能通过构造函数初始化,不能在类的定义中初始化;

2、常量,只能通过初始化列表初始化,不能在类的定义外(内)初始化,不能通过构造函数初始化。

3、引用变量,只能通过初始化列表初始化且必须用变量初始化,不能在类的定义外(内)初始化,不能通过构造函数初始化。

4、静态整型常量,能在在类外初始化,不能带static,(整型)能否在类中初始化,取决于编译器

5、静态非整型常量,能在在类外初始化,不能带static,(double型)能否在类中初始化,取决于编译器

4,5 在类定义内部初始化时,在VC6.0中都不能编译通过,而在GCC中都可以编译通过,所以4,5在不同编译器下有不同的结果,但1,2,3是确定的。当然,如果不习惯类内初始化,可以将静态常量和静态变量的初始化统一起来,将静态常量和静态变量的初始化全部都移动类定义之外初始化(推荐使用这种方式)。

另外,如果编译器不支持类内初始化,而此时类在编译期又恰恰需要定义的成员常量的值,身出如此左右为难的境地,我们应该考虑使用enum!因为enum本质也是一个整型常量。

class student{ private: enum{NUM_LEGTN = 6}; int score[NUM_LEGTN]; };
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid