从C转向C++
条款1:尽量用const和inline而不用#define
- 少用define定义某个常量。在调试时编译器永远不会看到被define的那个数据,影响调试效率。应将“#define PI 3.14”改为“const double PI = 3.14”,性能相差无几,在类型安全上更可靠。但是注意,若要定义一个指针型常量,需要写两个const,比如const char * const authorName = “Scott Meyers”;
- 少用define实现类似函数的功能。一是涉及到类型安全问题,编译器不会去检查“参数”的类型,二是可能出现函数重复运行的问题。例如max(++a,b),a的值增加了两次,而max(++a,b+10)则正常。
条款2:尽量用< iostream>代替< stdio.h>
- 对cunt,cin的流操作相对于printf、scanf不用考虑变量类型、取地址等问题(scanf并不会检查参数是不是地址)。
- 使用< iostream>而不是< iostream.h>。前者的命名空间是std,后者的则是全局,后者容易引起命名冲突。
条款3:尽量用new和delete而不用malloc和free
- 后者不会激活类的构造函数和析构函数
- 后者不会自动判断变量需要的内存空间,比如为字符串分配空间的时候
- 千万不要把前者和后者混用