C++中静态变量、常量、静态整型常量、静态非整型常量、引用变量的初始化方法
2015-11-08 14:51
477 查看
C++中静态变量、常量、静态整型常量、静态非整型常量、引用变量的初始化方法
先看一段代码
总结:根据上述代码,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];
};
先看一段代码
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];
};
相关文章推荐
- STM32按键输入、所需要的C语言复习、时钟系统框图
- [leetcode]Lowest Common Ancestor of a Binary Search Tree
- C标准库(1)
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- 第9周项目2 对称矩阵压缩存储的实现与应用
- C语言中的结构体(struct)
- 蓝桥杯练手之堆煤球
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- 蓝桥杯练手之回文数字
- 使用MPI并行求解前缀和(prefix sum)
- 【C语言】 实现strlen
- C语言枚举类型
- C++11中的智能指针
- C++推荐书籍
- C++ 指针基础理解
- 【C语言】 递归求非负数的每一位之和
- 【C语言】 实现strstr
- 第一章 初识C语言
- 【C语言】 字符串逆序
- 深入理解C++浮点数(float、double)类型数据比较、相等判断