const与#define
const | #define |
---|---|
在编译运行阶段使用 | 在预处理阶段展开 |
有数据类型 | 无数据类型 |
编译器会进行类型安全检查 | 只进行字符替换,并可能产生错误 |
可以进行调试(有集成化的调试工具) | 不能调试 |
在内存中分配 | 仅仅是展开 |
可以创建class专属常量。提供封装性 | 无法创建class专属常量,一旦宏被定义,就在其后得编译过程中有效(除非被#undef。即不能提供封装性) |
指针与引用
指针 | 引用 |
---|---|
是一个存储着地址的变量 | 指向对象的一个别名 |
可以在任何时候被初始化 | 创建时必须被初始化 |
可以为NULL | 不能有NULL引用 |
可以随时改变所指的对象 | 不能改变引用的关系 |
需要分配内存空间 | 不需要分配内存空间 |
malloc/free与new/delete
malloc/free | new/delete |
---|