const常量和#define宏定义常量区别
编译器处理不同
- const常量,在运行时,作为一个类只读数据;
- 宏定义常量,在编译时把所有使用宏定义值的地方用常量代替。
类型不同
- const常量,具有类型,编译器可以进行安全检查;
- 宏定义常量,没有数据类型,只是简单的字符串替换,不能进行安全检查。
存储方式不同
- const常量,需要进行内存分配;
- 宏定义常量,直接替换,不会分配内存,存储与程序的代码段中。
定义域不同
- const常量,只能在常量定义的定义域内使用,有限制;
- 宏定义常量,在定义后均能使用,无限制。
定义后能否取消
- const常量,在定义域内永久有效;
- 宏定义常量,使用
# undef来使之前的宏定义失效。
使用const定义常量注意事项!!
- const定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式。
- 其他情况下它只是一个
const 限定的变量,不要将与常量混淆。
const的优点
可以节省空间,避免不必要的内存分配
- const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像
#define一样给出的是立即数。
- const定义的常量在程序运行过程中只有一份拷贝,而
#define定义的常量在内存中有若干个拷贝。