effective c++ 第一章:让自己习惯c++
来源:互联网 发布:2010表格找出重复数据 编辑:程序博客网 时间:2024/04/30 16:35
条款1: 视c++为语言联邦
高效的c++在不同场景下,有不同的编写范式或风格。没有必要为其规定统一格式,根据需要使用c++不同的特点去扮演不同的角色吧。
条款2:尽量以const、enum和inline替代define
使用define“定义”的常量对编译器不可见,不会进入符号表,不便以后排错,且会加大目标代码量。使用define定义的函数宏也十分不便。
如何使用const定义和初始化不同类型的常量,也需要留意。还记得常量指针的定义吗?
1. const int* p:p值的数据是常量;int * const p:p本身是常量,以及const int * const p。
2. 类内的const static成员在头文件中定义,在源文件中初始化。
关于the enum hack的理解现在还不是很深:可以使用一个enum成员当做一个int的常量,使得程序可以顺利编译(如使用它作为数组长度)
inline函数针对函数宏而言的,而它的主要目的是为了规避函数调用的代价。inline函数的缺点呢? 过度使用inline函数会增加目标代码量,还有呢?
条款3:尽可能使用const
感觉const为用户(调用者)做语义保证,当然离不开编译器的支持。
到底有哪些地方可以使用const呢,一般的,比如全局和局部变量,类变量,函数参数,类方法;还有函数返回值,虽然这个自己不常用,但在STL却大量出现。
编译器保证const对象的bitwise constness,但是有时候我们需要改变对象的一些bit(呵呵,即内部状态)而不影响外部表现,做到logic constness,这是就需要mutable关键字出场了,const成员函数可以改变有mutable修饰的成员变量。
另外,const属性可以作为函数签名的一部分,参与重载。如f(const int)与f(int)是合法的重载函数。对一个const对象,访问者只能调用它的const成员函数。如果你允许用户定义一个const的对象,记得要为其定义const函数。
4:确认对象使用前已进行初始化
这是常识。这里补充一下c++如何初始化成员对象。
构造函数的初始化列表是其成员变量初始化的地方,而构造函数体则是在初始化后进一步处理的场所。如果不注意这些,在构造函数体内“初始化”成员对象,不仅造成效率问题,也使得const成员无法完成合适的初始化。
成员对象的初始化顺序是先父类再子类,先早定义的后晚定义的(而不是按照初始化列表里的顺序)。
如果某个成员没有出现在初始化列表内,则按照其默认构造函数进行初始化。
- 《Effective C++》第一章:让自己习惯C++
- Effective C++ 第一章(让自己习惯C++)
- (Effective C++)第一章 让自己习惯C++(View Yourself to C++)
- Effective C++(一)让自己习惯C++
- Effective C++(一)让自己习惯C++
- effective c++-让自己习惯c++
- 《Effective C++》1-让自己习惯C++
- effective c++ 第一章:让自己习惯c++
- Effective c++ 第一章 让自己习惯C++
- Effective C++第一章让自己习惯C++
- Effective C++第一章:让自己习惯C++
- effective C++ 第一章:让自己习惯C++
- 【读书笔记】Effective C++-1 让自己习惯C++(之一)
- 【读书笔记】Effective C++-1 让自己习惯C++(之二)
- 【读书笔记】Effective C++-1 让自己习惯C++(之三)
- 《Effective C++》让自己习惯C++:条款1-条款4
- Effective C++读书笔记1(让自己习惯C++)
- Effective C++读书笔记1(让自己习惯C++)
- 如何解决网站的高流量,高并发问题
- Android大图片裁剪终极解决方案(上:原理分析)
- Visual Assist X设置
- 题目1090:路径打印
- linux查看端口命令
- effective c++ 第一章:让自己习惯c++
- Android大图片裁剪终极解决方案(中:从相册截图)
- Android大图片裁剪终极解决方案(下:拍照截图)
- 数据可视化:一张图胜过千言万语
- linux tar 命令参数 详细
- nodejs--http篇
- 为android-support-v4.jar打包源码
- Filter的部署
- 时间类