1.编译器处理阶段
define是预处理器预处理阶段完成的
const是编译器编译运行时完成的
时间上:define早于const
2.定义上不同
define时宏定义,它最大的特点就是语义替换,它定义的常量值 没有类型限定,也不做类型检查,在宏出现的地方直接展开
const是关键字,其实就是一个only_read变量,不能更改,它会在编译时检查数据类型
3.起的作用不同
define只是替换,不会做表达式运算
#define N 1+2 //我们预想的N值是3,我们这样使用N double a = N/2; //我们预想的a的值是1.5,可实际上a的值是2 //实际上就是 a = 1+2/2 = 2
4.存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。
就空间效率而言:const优于define
原文:https://www.cnblogs.com/sjyu/p/14413964.html