C++11中类数据成员初始化方法详解
来源:互联网 发布:当淘宝客服的心得体会 编辑:程序博客网 时间:2024/04/29 11:33
C++98为类中提供类成员的初始化列表。
类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算1.类里面的任何成员变量在定义时是不能初始化的。
2.一般的数据成员可以在构造函数中初始化。
3.const数据成员必须在构造函数的初始化列表中初始化。
4.static要在类的定义外面初始化。
5.数组成员是不能在初始化列表里初始化的。
6.不能给数组指定明显的初始化。
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,我只好转而求助于静态数据成员或者使用枚举。
但是在C++11中,我们可以利用类内初始化:
可以看到基本类型不用多说,可以在类内初始化。在这里我们重点看const 与static,引用,以及数组。const 的int 与float都能在类内初始化。但是static还是只有static const int 能在类内初始化,其他的static 还是能在类外初始化。而引用则可以在类内初始化。而无论是const 数组还是非const 数组,都不能在类内显示初始化。其中 int m[3] 为整型数组数据成员, 所以应该用constexpr表达式。关于constexpr和const的区别如下:int j = 15;class Bclass{private:int f = 100;float g = 200.0;const float h = 30.0;const int a=10;// const int array[20];// int thesecondarray[20] = { 0 };int &b=j;int &k = f;static int c;static const int d=30;static const float e;static const int d=30;static constexpr float g=9.5f;public:Bclass(){// array[20] = { 0 }; 注释去掉有错误//thesecondarray[20] = { 0 };}void print(){cout << a << " "<< b << " "<< c << " "<< d << " "<< e << " "<< f << " "<< g << " "<< h << " "<< k << endl;//for (int i = 0; i < 20; ++i)//cout << array[i] << " ";//for (int i = 0; i < 20; ++i)//cout << thesecondarray[i] << " ";}};int Bclass::c = 20;const float Bclass::e = 40.0;static constexpr float int m[3]={0,1,2};
const是表明这个值是constant的,但是不必在编译期确定,然而数组的大小是需要在编译期确定的,如:
然而对于constexpr,则表明这个值不仅是constant的,而且也是编译期确定的,于是,constexpr修饰的是可以用于数组大小的。
int i; // not constantconst int size = i; // fine!int arr[size]; // Error!
int i; // not constantconstexpr int size = i; // Error!
0 0
- C++11中类数据成员初始化方法详解
- c++中初始化数据成员的方法
- objective-c 类和对象中静态数据成员和静态成员函数(类方法)详解
- 在c++类定义时初始化数据成员的方法
- 类的数据成员初始化
- 类数据成员的初始化
- 类中引用类型数据成员的初始化
- 构造函数在类中初始化数据成员
- java类中数据成员初始化的顺序
- C++类中静态数据成员MAP如何初始化
- const数据成员的初始化方法
- 在类中初始化常量成员变量的方法
- 类中成员和方法的初始化顺序
- java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解
- java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解
- C++中成员变量的初始化方法
- 类中static成员初始化
- 三角形类(在构造函数中使用参数初始化表对数据成员初始化)
- 34. Search for a Range
- 开发环境配置
- spring事务管理-声明式事务
- 安卓项目复制
- 排序算法-冒泡排序
- C++11中类数据成员初始化方法详解
- Linux下实现简单进度条
- Centos7(64bit) minimal 下安装Mysql5.7.17
- 编程的道与术
- 二叉树的相关面试题<三>-----二叉树中和为某一的路径
- openwrt之wrtnode学习日记day2
- 17 - 01 - 13 计算机网络(03)(物理层)
- 漫漫考研路之考后总结
- 新类库中的构建