在之前的博客里写到了C语言中的 const 关键字,而 const 在C++中也有广泛的使用。在C++中,可以用 const 定义常量,也可以用#define定义常量。但是这两者之间又存在区别。
先说一下#define常量的概念。
define:无参宏定义的一般形式为:#define 标识符 字符串
define 函数定义一个常量。常量类似变量,不同之处在于:在设定以后,常量的值无法更改。作用域不影响对常量的访问 。常量值只能是字符串或数字。
C++ 常量:
编译阶段,把用到常量的地方替换成常量初始化的值
1. 一定要初始化
2. 不能做左值
3. 不能间接修改,杜绝间接访问来修改常量内存的风险
问:const与#define相比有什么不同?
答: C++中可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的优点:
1. const常量有数据类型,而宏常量没有数据类型。编译器可以对const常量进行类型安全检查,而对#define只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误,例如边际效应。
2. 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。