从书名看是关于设计C++接口的书,内容却不仅仅是关于C++接口设计。书还算实用,但如果看过代码大全和Effective系列的话,可以不用在看这本书了。

笔记

P91 重构就像汽车高速行驶时更换引擎,但还不能停车

P103 API的第一个发行版本很重要

P115 LISKOV替换原则指出,如果S是T的子类,那么在行为上,S不需要修改就可以替换T类型的对象

P117 私有继承、Was-a的关系

P119 开发封闭原则是一种启发式的原则,则不是必须遵守的

P121 一个好的名字往往可以表达类的意图,如果一个类难以命名,这往往是缺乏设计的信号

P122 函数尽量使用正面的概念命名,比如IsConnect而不是IsUnConnect

P132 C API比C++ API具有更好的二进制兼容性

P140 可以使用预处理器技术模拟模板

P176 避免使用友元,这往往意味这糟糕的设计

P182 如果没有必要使用Dynamic_Cast则常见的做法是关闭运行时信息生成

P182 不要猜测性能瓶颈的位置

P183 传值可能会导致对象切割而引起莫名其妙的问题

P185 不应该前置声明STL的类型

P192 C++11中一个构造函数可以调用其他的构造函数

P192 对象越小,就越适合缓存

P197 Donald Knuth有句名言:过早优化是万恶之源

P211 Linux 的奇数版本号代表开发版本

P216 如果确实需要做二进制不兼容,则需要考虑给信库起个新名字。比如zlib.dll -> zlib1.dll

P225 弃用标记:__declspec(deprecated)

P250 时间驱动、质量驱动和功能驱动

P257 性能测试的结果是实数而不是简单的真和假

P264 驱动测试开发的好处是推动你考虑接口会被如何调用

P286 SWIG

P286 任何脚本绑定技术都是建立在适配器模式上的

P286 Boost.Python支持Boost和Python的互相交互

P265 模拟对象又可以简单称为MOCK

P339 每个DLL有相应的到入库lib文件,虽然静态库和导入库的格式都是lib但他们的文件类型是不同的