const和define的区别以及const的优点
⼀、const和define的区别
(1)就起作⽤的阶段⽽⾔:#define是在编译的预处理阶段起作⽤(在预处理阶段进⾏替换),⽽const是在编译运⾏的时候起作⽤(const修饰的只读变量是在编译的时候确定其值)
(2)就起作⽤的⽅式⽽⾔:#define只是简单的字符串替换,没有类型检查。⽽const有对应的类型,是要进⾏判断的,可以避免⼀些低级的错误
(3)就存储⽅式⽽⾔:#define只是进⾏展开,有多少地⽅使⽤,就替换多少次。它定义的宏常量在内存中存若⼲个备份;const定义的只读变量在程序中只有⼀份备份
(4)从代码调试的⽅便程度⽽⾔:const常量可以进⾏调试的,define是不能进⾏调试的,因为在预编译阶段就已经进⾏替换了
(5)就内存分配⽽⾔:编译器通常不为普通的const只读变量分配存储空间,⽽是将它们保存在符号表中,这使得它成为⼀个编译期间的值,没有了存储与读内存的操作,使得它的效率也很⾼
#define M 3
const int N = 5;  //此时并未将N放⼊内存中
int i = N;此时为N分配内存,以后不再分配
int l = M;//预编译期间进⾏宏替换,分配内存
int j = N;//没有内存分配
int J = M;//再进⾏宏替换,⼜⼀次分配内存
const定义的只读变量从汇编的⾓度来看,只是给出了对应的内存地址,⽽不是像#define⼀样给出的是⽴即数,所以,const定义的只读变量在程序运⾏过程中只有⼀份拷贝(因为它是全局的只读变量,存放在静态区),⽽#define定义的宏常量在内存中有若⼲个拷贝。
⼆、const的优点
(1)const常量有数据类型,⽽宏常量没有数据类型,编译器可以对const进⾏类型安全检查,⽽对后者只进⾏字符替换,没有类型安全检查,并且在字符替换可能会产⽣意料不到的错误
(2)有些集成化的调试⼯具可以对const常量进⾏调试,但是不能对宏常量进⾏调试
const的作用(4)const在内存中只存储了⼀份,节省了空间,避免不必要的内存分配,提⾼了效率

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。