(1)编译器处理方式不同:#define 宏在预处理阶段展开,const 常量在编译阶段展开。
(2)类型和安全检查不同:
#define宏没有类型,不做任何类型检查,仅仅是展开;
const 常量具有具体的类型,在编译阶段会执行类型检查。
(3)存储方式不同:
#define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存;
const常量会在内存中分配(可以是堆中或者栈中)
(4)const 可以节省空间,避免不必要的内存分配。
(5)提高了效率,编译器通常不为普通const常量分配存储空间,而是将她们保存在符号表里,这使得它成为一个编译期间的常量,没有了存储于读取内存的操作,使得它的效率也很高。