Effective C++_Item4笔记
2016-07-29 13:36
197 查看
1. 你要区分赋值和初始化的区别,初始化的效率要高于赋值,int a = 5;这样的赋值相当于先进行初始化再进行赋值,如果使用int a{5}; (C++11)进行初始化操作,可以提高效率
2. 在构造函数中一定使用成员初始化列来初始化
3. C++有着十分固定的成员初始化顺序,基类总是早于派生类被初始化,在类中的成员变量总是以在声明的顺序来进行初始化,即使他们在成员初始化列中以不同的次序被初始化,为避免一些隐蔽的错误,当你在成员初始化列中条列各个成员的时候,最好以其声明顺序为次序,在这里举一个例子,在初始化一个自定义的数组类的时候,必需先指定数组的长度,因此代表大小的那个变量必需先有初值
4. 跨编译单元之初始化次序问题,现在有两个类A,B,其中B要调用A的一个实例extern A a;(只有声明,没有初始化),那么我就一定要保证这个实例a在B的调用之前被初始化,但是这个实例和B可能不是一个人所写,而且C++对于定义于不同编译单元的对象的初始化相对次序没有明确的定义.我们可以通过一个小小的设计来规避这个问题,即在类B中定义一个成员函数,这个成员函数返回一个类A的引用,这个成员函数中定义一个static的类A对象,然后将其返回,在使用的时候使用这个成员函数来代替对a的直接使用
首发于我的个人网站: 点击打开链接
2. 在构造函数中一定使用成员初始化列来初始化
3. C++有着十分固定的成员初始化顺序,基类总是早于派生类被初始化,在类中的成员变量总是以在声明的顺序来进行初始化,即使他们在成员初始化列中以不同的次序被初始化,为避免一些隐蔽的错误,当你在成员初始化列中条列各个成员的时候,最好以其声明顺序为次序,在这里举一个例子,在初始化一个自定义的数组类的时候,必需先指定数组的长度,因此代表大小的那个变量必需先有初值
4. 跨编译单元之初始化次序问题,现在有两个类A,B,其中B要调用A的一个实例extern A a;(只有声明,没有初始化),那么我就一定要保证这个实例a在B的调用之前被初始化,但是这个实例和B可能不是一个人所写,而且C++对于定义于不同编译单元的对象的初始化相对次序没有明确的定义.我们可以通过一个小小的设计来规避这个问题,即在类B中定义一个成员函数,这个成员函数返回一个类A的引用,这个成员函数中定义一个static的类A对象,然后将其返回,在使用的时候使用这个成员函数来代替对a的直接使用
首发于我的个人网站: 点击打开链接
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- AS3自写类整理笔记 ClassLoader类第1/2页
- AS3自写类整理笔记 Dot类第1/2页
- DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 .
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- perl脚本学习指南--读书笔记
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法