[深度探索C++对象模型]关于成员初始化列表(member initiallization list)
来源:互联网 发布:阿里云 数据中心 宕机 编辑:程序博客网 时间:2024/06/11 04:36
四种特殊情况:
1、当初始化一个reference member时。
2、当初始化一个const member时。
3、当初始化一个base class的constructor,而它拥有一组参数时。
4、当初始化一个member class的constructor,而它拥有一组参数时。
除了上面四种情况,其他情况下的选择其实都差不多。而这四种情况如果不使用成员初始化列表,程序能够被正确编译并且执行,但是效率不高。
一个简单的例子
class Word{ String _name; int _cnt;public: Word(){ _name=0; _cnt=0; }};
在这里,Word 的constructor会先产生一个临时性的string object,然后将它初始化,随后赋值给_name,其代码可能会扩张成这样:
Word::Word(){ //调用String的默认构造函数 _name.String::String(); //产生一个临时对象 String temp=String(0); //“memberwise”地拷贝_name _name.String::operator=(temp); //摧毁临时对象 temp.String::~String(); _cnt=0;}
注意事项
编译器在实现initialization list时,以适当顺序在constructor之内安插初始化操作,并且在任何explict user code之前。但是有一些细微的地方要注意:list之中的项目顺序是由class中成员变量的声明顺序决定的,不是由initialization list中的排列顺序决定的,例如:
class X{ int i; int j; public: X(int val):j(val),i(j) {...}}//错误!,i会在j之前先初始化,所以会出错!
阅读全文
0 0
- [深度探索C++对象模型]关于成员初始化列表(member initiallization list)
- C++对象模型(四):class成员初始化列表(Member Initialization List)
- 【C++】深度探索C++对象模型之虚拟成员函数(virtual member function)
- 读《深度探索C++对象模型》之成员初始化列表作用
- 深入探索C++对象模型笔记之五 —— 构造函数语意学 (成员们的初始化队伍 Member Initialization List)
- C++初始化成员列表(member initialization list)
- 成员初始化列表(member initializer list)
- 《深度探索C++对象模型》:member functions
- 《深度探索C++对象模型》笔记(三)构造函数、拷贝构造和初始化列表
- 类成员变量初始化列表(Member Initialization List)
- 类成员变量初始化列表(Member Initialization List)
- 深度探索C++对象模型--继承与Data Member
- 深度探索C++对象模型------Data member的绑定
- 深度探索C++对象模型----data member的存取
- 《深度探索C++对象模型》:Data member的布局
- 深度探索C++对象模型--关于对象
- 深度探索C++对象模型---Data member的布局(Data member Layout)
- 深度探索C++对象模型
- tips:linux服务器上java应用图片中中文乱码的解决
- Android图文混排实现方式详解
- Unity 5.x: SubMesh + 多材质 的使用方式
- AOP底层原理图解
- mmap和shmget的区别
- [深度探索C++对象模型]关于成员初始化列表(member initiallization list)
- XCode iOS调试总结
- Ext JS 消息提示框
- Spring配置数据源的四种方式(小结)
- myeclipse或eclipse导出jar包的方法
- 使用WebService 获取网络服务数据(手机归属地)
- android apk 捕获全局异常处理,阻止弹出系统强制退出对话框
- “http://hao643.com/?r=wwwww&m=c166” 类似这样的恶意链接去除方法
- 欢迎使用CSDN-markdown编辑器