C++(十九) — const 和 #define 区别

时间:2023-03-08 21:59:36

1、const 

  (1)C++对 const 常量的处理过程:当编译器碰到 常量声明 时,在符号表中放入常量,编译时发现使用常量,则直接以符号表中的值替换。

  (2)如果,编译中发现,对 const 使用 extern 或者 & 操作符时,则会给对应变量分配新的存储空间。

  符号表保存的内容:  key       value

                 a      10

  在程序运行时,符号表是不变的。

(3)const 是在编译器编译期间,分配内存。

int main()
{
const int a = ; // a 定义为一个常量 int *p = nullptr;
p = (int *)&a; //此处取a 的地址,但C++会单独分配一个新的内存空间,
*p = ; //间接赋值,不会改变 a 中的值,因为保存的不是一个内存空间
cout << "const a is: " << a << "\n"; // 输出:10
cout << "point p is: " << *p << endl; // 输出:20 system("pause");
return ;
}

 2、const 和 #define 区别

   (1)都是在编译时处理的,即分配内存,作用是相同的。即:二者基本等价

const int c=;
#define c 5

  (2)区别:const 常量是由编译器处理的提供类型检查和作用域检查;

           #define,宏定义由预处理器处理,单纯的文本替换。可以用 #undef a 卸载宏定义。