《高质量C++/C编程指南(林锐)》学习笔记

1. 不可以将布尔变量直接和TRUE、FALSE、1、0进行比较。应该用if(flag)或者if(!flag)。

    整型变量直接用”==“或者”!=“与0进行比较。

浮点变量不可以直接用”==“或者“!=”与数字比较。

指针变量用“==”和“!=”与NULL直接进行比较。

2. 可以使用诸如if(NULL == P)来避免if(NULL=P)类错误。

3. 在有循环嵌套的时候,尽量将长循环放在最内层,这样可以提高效率。

4. 可以使用#define来定义宏常量,用const来定义const常量。const常量有数据类型,宏常量没有数据类型。编译器可以对const常量进行类型安全检查。在C++中,const常量 完全取代宏常量。

5. C语言中,函数参数传递有值传递和指针传递两种方式;C++语言中,函数参数传递有值传递、指针传递以及引用传递。如果函数无参数,使用void进行填充。

6. 使用宏断言assert对程序进行检查。assert仅在Debug版本起作用。Debug版本主要用于内部调试,Release版本主要发行给用户使用。

7. return语句不可以返回“栈内存”的“指针”或者“引用”,因为该部分内存在函数体结束时会被自动销毁。

8. 内存分配方式,如全局变量、static变量等在程序编译时就已经分配好的内存在静态存储区域。如函数内局部变量等存储单元在栈上分配内存。如用malloc或new申请的动态内 存从堆上分配。

9. 内存容量计算。使用sizeof计算数组容量是可以的,若使用sizeof识别指针变量所指向的容量大小,只能得到一个指针变量的字节数,而不是其所指的内存容量。另外,当数组 作为函数的参数进行传递时,该数组自动退化为同类型的指针。

10. 当指针p被free掉之后,其地址仍然不变,但是该地址对应的内存是垃圾,p变成“野指针”,此时需要把p设置为NULL。

11. inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。定义在类声明中的成员函数将自动地成为内联函数。内联可以提高执行效率,但是以代码膨胀为代价,要 权衡执行效率和内存空间。

12. C++编译器编译任意一个类时,会自动产生四个缺省函数:无参数构造函数,拷贝构造函数,析构函数,赋值函数。

你可能感兴趣的:(C/C++)