Initialization list的作用是效率

如下代码可以编译并运行,但是效率低下

 class Word  {String _name;int    _cnt;public:Word()  {   _name = 0;    _cnt  = 0;  // 是否使用initialization list 都是相同的}
};

其等价于

Word::Word() {_name.String::String(); //调用String的 default constructor String temp = String(0); //产生暂时性对象 _name.String::operator=( temp ); // "memberwise"地拷贝_nametemp.String::~String(); //摧毁暂时性对象_cnt = 0;
}

这样优化,则效率大大提升:

 //较佳的方式Word::Word(): _name( 0 ){_cnt = 0;}

其等价于

 Word::Word(){_name.String::String( 0 );                    //调用String(int) constructor_cnt = 0; }

【引用】
[1]<<深度探索C++ 对象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 译
[2] 代码地址 https://github.com/thefistlei/cplusStudy.git

深度探索C++ 对象模型(5)-Initialization list(2)相关推荐

  1. 深度探索C++ 对象模型(5)-Initialization list(3)

    四点: 1.list中的项目次序是由class中的members声明次序决定,不是由initialization list中的的代码决定 如下代码有一个陷阱,i值为一个不可预知未初始化的值.原因是按照 ...

  2. 深度探索C++ 对象模型(5)-Initialization list(1)

    以下四种情况,一定要使用成员初始化列表: 1.初始化一个引用成员 2.初始化一个const成员 示例代码为 class Shape{const int m_size; //const 常量int &a ...

  3. 《深度探索C++对象模型》--5 构造析构拷贝 6 执行期语意学

     <深度探索C++对象模型>--5构造.析构.拷贝语意学 1.纯虚函数: (1)C++可以定义和调用一个纯虚函数,不过只可以静态调用,不可以由虚拟机制调用. 注意:pure virtu ...

  4. 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

    来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C++内部的原理的完全空白,然后找到<Inside The C++ Object Model>这本书 ...

  5. 深度探索C++对象模型第2章 构造函数语义学

    默认构造函数 两个误区: 1 任何class如果没有定义默认构造函数,就会被合成一个出来:只有在某些情况下被合成 2 编译器合成出来的默认构造函数会明确设定class中每一个数据成员的默认值 :默认值 ...

  6. 第2章构造函数语义学读书笔记——深度探索c++对象模型

    深度探索c++对象模型 第2章 构造函数语义学 2.1 Default Constructor的构建操作 2.2 Copy Constructor的构造操作 2.3 程序转化语义学 2.4 成员的初始 ...

  7. 深度探索C++ 对象模型(7)-Data member的布局(虚继承)

    虚拟继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...

  8. 深度探索C++ 对象模型(7)-Data member的布局(多重继承)

    多重继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...

  9. 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)

    无继承 继承无多态 继承多态 虚表 : 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI). 每个class object导入一个vptr,提供执行期的链接,使得每一个class ...

最新文章

  1. 【Android】Activity生命周期(亲测)
  2. [转贴]电阻电容的封装形式如何选择
  3. 自然语言处理中的符号表征
  4. redis安装 linux步骤,【linux安装redis完整步骤】
  5. vue手机端回退_vue移动端弹框组件,vue-layer-mobile
  6. 错误日志类-也可以用于查看输出结构
  7. 第28月第10天 iOS动态库
  8. 随想录(C++下多线程的创建)
  9. [转]JavaScript继承详解
  10. DW8里面的HTML面板在哪里,打开Dreamweaver8窗口后,如果没有出现属性面板,可执行()菜单中的 - 问答库...
  11. hdu2534-Score
  12. 多线程设计实例——Monte Carlo法估算圆周率
  13. 多目标狼群优化算法(MGWO)
  14. warning: control reaches end of non-void function [-Wreturn-type]
  15. TortoiseSVN使用简介
  16. 苹果蓝牙耳机怎么接电话_如何在开车时可以更安全的接电话——ROMAN R6000蓝牙耳机...
  17. 揭密win7pe制作全过程
  18. 用单片机DIY的RFID模拟卡,能模拟现有125KHz的卡!(转)
  19. 简化版的DRCNN代码(Python)
  20. regsvr32 命令注册COM组件报错模块已加载,但是对DLL的调用失败,错误代码0x80004005

热门文章

  1. 为什么我启动哪一个tomcat都是启动同一个tomcat(tomcat7)
  2. python打开中文文本utf-8用不了_关于Python文档读取UTF-8编码文件问题
  3. makefile使用宏及用法$(宏标识符) $(cc)_宏编程的艺术
  4. sql发送邮件 html,T-SQL;如何在表之前和之后以HTML格式使用sp_send_dbmail
  5. 邀请参加活动的邀请函_圣诞节点灯仪式活动邀请函制作
  6. 战神引擎修改服务器时间,修改战神引擎手游进入游戏公告内容教程
  7. centos组件显示乱码,centos组件显示乱码_解决CentOS下中文显示乱码
  8. Python之tushare:tushare库的简介、安装、使用方法之详细攻略
  9. AI:2020年6月22日北京智源大会演讲分享之《语音与自然语言处理》09:10-09:40 Christopher 教授《基于深度上下文词表征的语言结构的发现》
  10. EL:集成学习(Ensemble Learning)的概念讲解、问题应用、算法分类、关键步骤、代码实现等相关配图详细攻略