define和const都可以用来定义常量,define的格式为:#define 标识符 字符串,const在定义常量前面,const类型定以后不能被修改,区别主要有如下几点:
1.编译器处理方式不同
define是在预处理时进行展开,在编译时会将其全部替换,const在编译运行使使用
2.存储方式不同
define是直接替代,因此不占用内存,在代码段存储,而const常量会占用内存,在数据段存储
3.类型不同
define没有类型,编译时不会做任何编译检查,const必须制定类型,编译器会进行类型检查
4.define具有边界效应
当编译时对define的对象进行替换时,进行系统展开可能会出现优先级问题,如定义一个乘法
#define Mul(a,b) a*b
Mul( 2, 3 ) //结果为2*3 = 6
Mul( 1+2, 3 ) //结果为1+2*3 = 5
Mul( (1+2), 3 ) //结果为(1+2)*3 = 9
由上可知,调用时需要加上括号才不会出错
5.定义域
const定义后在常量定义域内有效,而define预处理之后则全局有效,当然也还可以取消,使用undef,如
#define n 1
#undef n
则只能在define和undef之间使用n,define还可以用来做条件编译,如
#ifdef WINDOWS
***;
#endif
#ifdef LINUX
***;
#endif
参考:《 C++ Primer 》
https://www.cnblogs.com/fengkang1008/p/4746157.html
https://www.cnblogs.com/scut-linmaojiang/p/4722338.html