一、编译阶段不同
define宏定义是在预处理阶段展开 如 #define first x
const是在编译、运行阶段才展开 如 const int P=1024;
(这也看出define是一个命令不用加;而const 是一个语句需要加;)
二、类型和安全检查不同
define无类型,不是类型安全的,不会进行类型检查,仅仅展开
const有类型,是类型安全的,会进行类型检查
三、内存占用不同
define仅仅是字符替换,(宏定义只做替换)程序中每次出现都要进行字符替换,所以程序中会有很多define宏的副本,就会产生很多内存损耗。但是其本身并未分配内存,用到才分配。且其不做替换,比如 define A 2+3,每次用到A就一直是替换2+3,而非是5。
const定义的值是常量不能改变,但会分配内存空间,但也就分配这一次,之后的程序并不用再分配。而且编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。