前言
大家好,我是雨墨,我深知好记性不如烂笔头的道理,所以在阅读的时候都尽量写读书笔记,方便日后复习,当然笔记并不能代替书籍上的内容。希望我的笔记也能帮助到大家,如果我的笔记有什么问题,欢迎大家给小老弟纠错~
条款一总结
视 C++ 为 C 、 面向对象、template、STL 的联邦
条款二总结
宏定义的坏处:
- 一方面以
#define example 17
举例- 编辑器调试的时候,很有可能会造成错误信息是
17
,然后让你不知所措,这是什么?从哪来的?。 - 预处理器可能盲目地将
example
替换成17
,导致目标码出现多份17
。 - 无法利用宏创建一个 class 专属常量,也不提供任何封装性,因为宏不重视作用域。
- 编辑器调试的时候,很有可能会造成错误信息是
- 另一方面,宏看起来像函数时,并不会有额外的开销,因为宏替换发生在编译阶段之前,属于文本插入替换,但是必须为宏中的每个实参加上小括号,但即使加上了小括号,这样的宏也可能会遭遇不可思议的事情。所以最好使用 inline func 代替宏。
- 宏替换发生在编译阶段之前,属于文本插入替换。
- 宏不检查类型。
- 宏定义的数据没有分配内存空间,只是插入替换掉。
const 为什么比宏好:
- 上述例子改用 const 绝不会出现目标码为多个的情况,const 在程序运行时只会进行一次备份,且可以进行常量折叠,能将复杂的表达式计算出结果放入常量表中。
- const常量有数据类型,编译器可以对其进行类型安全检查。
- const定义的变量只是值不能改变,但要分配内存空间。
条款三总结
-
顶层 const 和底层 const 的区别
-
如何把迭代器声明指针为 const 一样
vector<int> vec; const vector<int>::iterator iter = vec.begin(); // T* const *iter = 10