const和define的区别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
const和define的区别
C++中不但可以⽤define定义常量还可以⽤const定义常量,它们的区别如下:
1、编译器处理⽅式不同
define宏是在预处理阶段展开。
const常量是运⾏阶段使⽤。
2、类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执⾏类型检查。
3、存储⽅式不同
define宏不分配内存,给出的是⽴即数,有多少次使⽤就进⾏多少次替换,在内存中会有多个拷贝,消耗内存⼤。
const常量会分配内存(可以是堆中也可以是栈中),在程序运⾏过程中内存中只有⼀个拷贝
4、在编译时,编译器通常不为const常量分配存储空间,⽽是将它们保存在符号表中,这使得它成为⼀个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很⾼。
宏替换只作替换,不做计算,不做表达式求解。
5、有些集成化的调试⼯具可以对const常量进⾏调试,但是不能对宏常量进⾏调试。
6、define宏不可以⽤指针变量去指向的,const常量可以⽤指针去指向该常量的地址的。
7、⽤define可以定义⼀些简单的函数,const是不可以定义函数的。
8、宏定义的作⽤范围仅限于当前⽂件。
默认状态下,const对象只在⽂件内有效,当多个⽂件中出现了同名的const变量时,等同于在不同⽂件中分别定义了独⽴的变量。
如果想在多个⽂件之间共享const对象,必须在变量定义之前添加extern关键字(在声明和定义时都要加)。
9、有时希望某些常量只在类中有效。
由于#define定义的宏常量是全局的,不能达到⽬的,于是想当然地觉得应该⽤const修饰数据成员来实现。
const数据成员的确是存在的,但其含义却不是所期望的。
const数据成员只在某个对象⽣存期内是常量,⽽对于整个类却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。
枚举常量不会占⽤对象的存储空间,它们在编译时被全部求值。
枚举常量的缺点是:它的隐含数据类型是整数,其最⼤值有限,且不能表⽰浮点数(如PI=3.14159)。