const常量和#define宏定义常量区别

809 阅读1分钟

编译器处理不同

  • const常量,在运行时,作为一个类只读数据;
  • 宏定义常量,在编译时把所有使用宏定义值的地方用常量代替。

类型不同

  • const常量,具有类型,编译器可以进行安全检查;
  • 宏定义常量,没有数据类型,只是简单的字符串替换,不能进行安全检查。

存储方式不同

  • const常量,需要进行内存分配;
  • 宏定义常量,直接替换,不会分配内存,存储与程序的代码段中。

定义域不同

  • const常量,只能在常量定义的定义域内使用,有限制;
  • 宏定义常量,在定义后均能使用,无限制。

定义后能否取消

  • const常量,在定义域内永久有效;
  • 宏定义常量,使用# undef来使之前的宏定义失效。

使用const定义常量注意事项!!

  • const定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式。
  • 其他情况下它只是一个 const 限定的变量,不要将与常量混淆。

const的优点

  • 防止修改,起保护作用,增加程序健壮性。

可以节省空间,避免不必要的内存分配

  • const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数
  • const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。