四种特殊情况:

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之前先初始化,所以会出错!

最新文章

  1. 样式PC和手机页面
  2. CListCtlr 控件的常见用法
  3. 网上测试了很多关于PYTHON的WEBSOCKET样例,下面这个才成功了
  4. C#调用cmd程序,读取结果
  5. 【HDU1233】还是畅通工程(MST基础题)
  6. NSNotification消息
  7. Hibernate框架--配置,映射,主键
  8. 【20190220】HTTP-知识点整理:TCP/IP与HTTP
  9. Asp.Net SignalR Hub集线器
  10. Cron表达式范例
  11. BeautifulSoup的基本操作
  12. bzoj 4715
  13. 【Android】LMK 工作机制
  14. (二)使用CXF开发WebService服务器端接口
  15. ActiveMQ producer不断发送消息,会导致broker内存耗尽吗?
  16. Ubuntu下设置开机后自动运行命令
  17. MySQL查询字符串长度最长的记录
  18. vijos1904 学姐的幸运数字
  19. Keras & Theano 输出中间层结果
  20. jQuery或者js保存文件到本地

热门文章

  1. OpenAPI 接口幂等实现
  2. 2流高手速成记(之五):Springboot整合Shiro实现安全管理
  3. JAVA学习前准备
  4. rocky二进制安装mysql8.0
  5. 2022,一个Java程序猿的装机配置
  6. Perl引用
  7. 刚哥谈架构(八)- 为你的应用选择合适的API
  8. 单例模式实现的多种方式、pickle序列化模块、选课系统需求分析等
  9. ubuntu 20.04 / 22.04 运行32位程序
  10. cv2.imread opencv读取不到图片问题