《C++程序设计语言 》特别版 读书笔记
2006-07-19 16:31
218 查看
《C++程序设计语言 特别版》
作者:(美)Stroustrup Bjame
翻译:裘宗燕
出版:机械工业出版设
书号:ISBN 7-111-10202-9
馆号:TP312C/B45
备注:精读
日期:2006.07.14-2006.07.23
第一部分 基础
第四章 类型和声明
避免类型对实现的依赖性
后缀的声明运算符比前缀的约束力更强
基本类型:
bool char signed char unsigned char wchar_t int signed int unsigned int
short long float double long double void enum{}
每章忠告摘选:
【1】保持较小的作用域
【3】一个声明只声明一个名字
【4】常用和局部名字短,不常用和全局短
【5】避免0和O,l和I的歧义
【7】反映意义而不是实现
【14.15.16】优先使用int,char,double
【11.12.17】避免对字符数值,整数大小,对象大小作不必要的假设
【19.20.21】带着疑问看待signed与unsigned,浮点与整数,int与char的转换
第五章 指针、数组、和结构
不存在与数组初始化相对应的赋值。
在应用于指针时,==比较的是地址
要将指针本身声明为常量必须使用 *const
忠告摘选
【6】尽量少使用普通的引用参数
第六章 表达式和语句
以0结尾的字符串的复制
void cpy(char* p,const char* q)
{while(*p++=*q++;)}
注释的使用:
【1】每个源文件
【2】每个类、模板和名字空间
【3】每个非平凡函数
【4】全局、名字空间变量、常量
忠告摘选:
【9】避免do语句
【13】倾向于定义一个成员函数operator new()去取代全局的new()函数。
第七章 函数
重载函数的调用准则:
【1】准确匹配
【2】提升匹配
【3】标准转换匹配
【4】自定义转换匹配
【5】利用声明中的省略号……匹配
忠告摘选:
【6】不要返回局部变量的指针或者引用
【9】使用函数指针前,考虑虚函数和模板是不是更好的选择
第八章 名字空间和异常
第九章 源文件和程序
头文件适合摆放的东西:
命名名字空间
类型定义
模板声明
模板定义
函数声明
内联函数定义
数据声明
常量定义
枚举
名字声明
包含指令
宏定义
条件编译指令
注释
忠告摘选:
【7】使用包含保护符
【11】区分一般用户界面和专家用户界面
第二部分
第十章 类
如果一个类外面定义它的const成员函数,要给const后缀
与临时变量有关的问题都出在以低级方式处理高级的数据类型
忠告摘选:
【5】采用名字空间,使类和协助函数关系明确
【10】如果一个类里有指针成员,它就需要有复制操作,包括复制赋值和复制初始化
【13】在复制赋值中要检查自我赋值
【16】在类中使用枚举定义整型常量
【17】构着全局和名字空间的对象时,避免顺序依赖。
第十一章 运算符重载
忠告摘选:
【10】用()作为多位数组的下标
第十二章 派生类
忠告摘选:
【2】用指针合引用避免切割问题
【5】用抽象类从界面(接口)中排除实现细节
【9】一个有虚函数的类应该有一个虚析构函数
【10】抽象类一般不需要构造函数
第十三章 模板
可以声明具有同一名字的多个函数模板合常规函数组合,匹配规则:
【1】找出能与这个重载解析的一组函数的专门化
【2】如果两个模板函数都能调用则考虑更专门的那个。
【3】在这组函数上做重载解析,包括常规函数
【4】如果函数合专门化具有相同好的匹配,选常规函数
【5】找不到匹配则出错。
忠告摘选:
【3】为指针的容器提供专门化,以减小代码规模
【10】用专门化和重载为同一个概念针对不同类型的实现提供统一的界面
【13】如果模板定义需要其他编译单位里的访问,记住写report
【14】对大模板和带有非平凡环境依赖性的模板,应该分开编译
【18】如果运行小效率非常重要,那么最好使用模板,而不是派生
【19】如果增加变形而不重新编译非常重要,那么最好使用派生
【20】无法定义公共基类,用模板
【21】兼容性约束的内部类型和结构很重要时,用模板。
第十四章 异常处理
catch块中条件H会在throw了E后执行的条件为:
【1】H和E相同的类型
【2】H是E的无歧义的公用基类
【3】H和E是指针类型,且【1】或【2】对于它们引用的指针类型成立
【4】H是引用类型,且【1】或【2】对于H引用的指针类型成立
要去覆盖一个虚函数,这个函数所带的异常描述至少是与那个虚函数的异常描述一样受限的。
忠告摘选:
【2】当更局部的控制机构足以应付时不要使用异常
【3】采用“资源申请即初始化”技术管理资源
【10】避免从喜购函数中抛出异常
第十五章 类层次结构
忠告摘选:
【5】在不可避免地需要漫游类层次结构时使用dymamic_cast
【10】在构造和析构期间不要调用虚函数
第三部分 标准库
第十六章 库组织和容器
忠告摘选:
【10】用base()从reverse_iterator中抽取出iterator;
【12】用迭代器类型,如list<char>::iterator,而不是索引容量元素地指针。
【13】在不需要修改容器元素地时候,使用const迭代器
第十七章 标准容器
list使用双向链表实现
deque(读佐deck)对两端地操作效率类似于list,下标操作接近vector
忠告摘选:
【2】了解经常使用地每个操作的代价(复杂性和大O)
第十八章 算法和函数对象
忠告摘选:
【1】多用算法,少用循环
【6】把测试表达成能够作为谓语使用的形式
【7】谓语是函数和对象,非类型
第十九章 迭代器和分配器
第二十章 串
第二十一章 流
第二十二章 数值
【标准库这一部分主要的东西靠熟悉每个的实现,最好能够自己去阅读代码并且编写实现里面的模板和代码等等】
第四部分 用C++做设计
这部分的笔记略,个人推荐几本好书:
《人月神话》
《代码大全》
《编程珠玑》
《设计模式》
作者:(美)Stroustrup Bjame
翻译:裘宗燕
出版:机械工业出版设
书号:ISBN 7-111-10202-9
馆号:TP312C/B45
备注:精读
日期:2006.07.14-2006.07.23
第一部分 基础
第四章 类型和声明
避免类型对实现的依赖性
后缀的声明运算符比前缀的约束力更强
基本类型:
bool char signed char unsigned char wchar_t int signed int unsigned int
short long float double long double void enum{}
每章忠告摘选:
【1】保持较小的作用域
【3】一个声明只声明一个名字
【4】常用和局部名字短,不常用和全局短
【5】避免0和O,l和I的歧义
【7】反映意义而不是实现
【14.15.16】优先使用int,char,double
【11.12.17】避免对字符数值,整数大小,对象大小作不必要的假设
【19.20.21】带着疑问看待signed与unsigned,浮点与整数,int与char的转换
第五章 指针、数组、和结构
不存在与数组初始化相对应的赋值。
在应用于指针时,==比较的是地址
要将指针本身声明为常量必须使用 *const
忠告摘选
【6】尽量少使用普通的引用参数
第六章 表达式和语句
以0结尾的字符串的复制
void cpy(char* p,const char* q)
{while(*p++=*q++;)}
注释的使用:
【1】每个源文件
【2】每个类、模板和名字空间
【3】每个非平凡函数
【4】全局、名字空间变量、常量
忠告摘选:
【9】避免do语句
【13】倾向于定义一个成员函数operator new()去取代全局的new()函数。
第七章 函数
重载函数的调用准则:
【1】准确匹配
【2】提升匹配
【3】标准转换匹配
【4】自定义转换匹配
【5】利用声明中的省略号……匹配
忠告摘选:
【6】不要返回局部变量的指针或者引用
【9】使用函数指针前,考虑虚函数和模板是不是更好的选择
第八章 名字空间和异常
第九章 源文件和程序
头文件适合摆放的东西:
命名名字空间
类型定义
模板声明
模板定义
函数声明
内联函数定义
数据声明
常量定义
枚举
名字声明
包含指令
宏定义
条件编译指令
注释
忠告摘选:
【7】使用包含保护符
【11】区分一般用户界面和专家用户界面
第二部分
第十章 类
如果一个类外面定义它的const成员函数,要给const后缀
与临时变量有关的问题都出在以低级方式处理高级的数据类型
忠告摘选:
【5】采用名字空间,使类和协助函数关系明确
【10】如果一个类里有指针成员,它就需要有复制操作,包括复制赋值和复制初始化
【13】在复制赋值中要检查自我赋值
【16】在类中使用枚举定义整型常量
【17】构着全局和名字空间的对象时,避免顺序依赖。
第十一章 运算符重载
忠告摘选:
【10】用()作为多位数组的下标
第十二章 派生类
忠告摘选:
【2】用指针合引用避免切割问题
【5】用抽象类从界面(接口)中排除实现细节
【9】一个有虚函数的类应该有一个虚析构函数
【10】抽象类一般不需要构造函数
第十三章 模板
可以声明具有同一名字的多个函数模板合常规函数组合,匹配规则:
【1】找出能与这个重载解析的一组函数的专门化
【2】如果两个模板函数都能调用则考虑更专门的那个。
【3】在这组函数上做重载解析,包括常规函数
【4】如果函数合专门化具有相同好的匹配,选常规函数
【5】找不到匹配则出错。
忠告摘选:
【3】为指针的容器提供专门化,以减小代码规模
【10】用专门化和重载为同一个概念针对不同类型的实现提供统一的界面
【13】如果模板定义需要其他编译单位里的访问,记住写report
【14】对大模板和带有非平凡环境依赖性的模板,应该分开编译
【18】如果运行小效率非常重要,那么最好使用模板,而不是派生
【19】如果增加变形而不重新编译非常重要,那么最好使用派生
【20】无法定义公共基类,用模板
【21】兼容性约束的内部类型和结构很重要时,用模板。
第十四章 异常处理
catch块中条件H会在throw了E后执行的条件为:
【1】H和E相同的类型
【2】H是E的无歧义的公用基类
【3】H和E是指针类型,且【1】或【2】对于它们引用的指针类型成立
【4】H是引用类型,且【1】或【2】对于H引用的指针类型成立
要去覆盖一个虚函数,这个函数所带的异常描述至少是与那个虚函数的异常描述一样受限的。
忠告摘选:
【2】当更局部的控制机构足以应付时不要使用异常
【3】采用“资源申请即初始化”技术管理资源
【10】避免从喜购函数中抛出异常
第十五章 类层次结构
忠告摘选:
【5】在不可避免地需要漫游类层次结构时使用dymamic_cast
【10】在构造和析构期间不要调用虚函数
第三部分 标准库
第十六章 库组织和容器
忠告摘选:
【10】用base()从reverse_iterator中抽取出iterator;
【12】用迭代器类型,如list<char>::iterator,而不是索引容量元素地指针。
【13】在不需要修改容器元素地时候,使用const迭代器
第十七章 标准容器
list使用双向链表实现
deque(读佐deck)对两端地操作效率类似于list,下标操作接近vector
忠告摘选:
【2】了解经常使用地每个操作的代价(复杂性和大O)
第十八章 算法和函数对象
忠告摘选:
【1】多用算法,少用循环
【6】把测试表达成能够作为谓语使用的形式
【7】谓语是函数和对象,非类型
第十九章 迭代器和分配器
第二十章 串
第二十一章 流
第二十二章 数值
【标准库这一部分主要的东西靠熟悉每个的实现,最好能够自己去阅读代码并且编写实现里面的模板和代码等等】
第四部分 用C++做设计
这部分的笔记略,个人推荐几本好书:
《人月神话》
《代码大全》
《编程珠玑》
《设计模式》
相关文章推荐
- C++程序设计语言特别版 学习笔记(0)
- 【读书笔记】SQL语言基础
- CLR via C# 3 读书笔记(15):第2章 生成、打包、部署和管理应用程序与类型 — 2.6 语言文化 & 2.7 简单应用程序部署
- JAVA语言程序设计 基础篇 读书笔记(前两章)
- 《Oracle从入门到精通》读书笔记第四章 SQL语言基础之一
- C++语言的设计与演化 读书笔记三
- C++语言的设计和演化读书笔记
- 读书笔记_Effective C++_条款一:将C++视为一个语言联邦
- 汇编语言(第三版)读书笔记 1 - 第1章 基础知识
- 汇编语言(第三版)读书笔记 2 - 第2章 寄存器
- 《Effective C#》读书笔记——条目5:为类型提供ToString()方法<C#语言习惯>
- 读书笔记——C语言深度剖析
- GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(之一)。
- 《Effective C#》读书笔记——条目10:使用可选参数减少方法重载的数量<C#语言习惯>
- 读书笔记-语言学习的方向
- 读书笔记--C++程序设计语言(3)
- 《GPU编程与CG语言之阳春白雪下里巴人》 读书笔记2
- C++程序设计语言(特别版)pdf
- C++程序设计语言(特别版):第一章 致读者
- (读书笔记).NET大局观-.NET语言(1)