面试收集--const常量与define宏定义的区别
网易实习的时候被问到这个题目,虽然当时答了一些,感觉面试官也知道我的意思,但是没有个详尽的介绍,这次网上搜集一下,大概有如下几点:
1 . const有类型,define无类型(最重要的)
define只是在预处理阶段做个简单的替换,而const在编译运行阶段是有严格的类型检查的
2 . const常量存储于程序的数据段,而#define常量是在代码段
3 . const比较节约存储空间
const在声明的时候不会真正分配空间,编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,只有在第一次被引用的时候才会分配空间,而且只在内存中有一个备份,而define展开一次就占用一些空间。
4. 当然这两个关键字各有不能替代的地方,但是在C++中,一个原则就是尽量用const而不用define。
define和const使用需要注意的是:
1 . define 要避免边缘效应,最好多用括号
2 . 类中使用const常量初始化只能在构造函数的初始化列表中,因为类定义只是个声明,不带内存分配功能, 而const初始化伴随着内存的分配
3 .要声明在整个类中都恒定的变量只能用枚举变量,虽然枚举也只能表示整型常量
参考:
kakaka2011: const常量与define宏定义的区别
kevinGao: 宏定义与常量定义的区别