C++(十九) — const 和 #define 区别
1、const
(1)C++对 const 常量的处理过程:当编译器碰到 常量声明 时,在符号表中放入常量,编译时发现使用常量,则直接以符号表中的值替换。
(2)如果,编译中发现,对 const 使用 extern 或者 & 操作符时,则会给对应变量分配新的存储空间。
符号表保存的内容: key value
a 10
在程序运行时,符号表是不变的。
(3)const 是在编译器编译期间,分配内存。
int main() { const int a = 10; // a 定义为一个常量 int *p = nullptr; p = (int *)&a; //此处取a 的地址,但C++会单独分配一个新的内存空间, *p = 20; //间接赋值,不会改变 a 中的值,因为保存的不是一个内存空间 cout << "const a is: " << a << "\n"; // 输出:10 cout << "point p is: " << *p << endl; // 输出:20 system("pause"); return 0; }
2、const 和 #define 区别
(1)都是在编译时处理的,即分配内存,作用是相同的。即:二者基本等价
const int c=5; #define c 5
(2)区别:const 常量是由编译器处理的,提供类型检查和作用域检查;
#define,宏定义由预处理器处理,单纯的文本替换。可以用 #undef a 卸载宏定义。