一. 为什么需要常量
(1)如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦:
1. 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意
思,用户则更加不知它们从何处来、表示什么。
2. 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。
3. 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。
(2)尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。
例如:
#define MAX 100 /* C 语言的宏常量 */
const int MAX = 100; // C++ 语言的 const 常量
二.const与#define的比较
C++ 语言可以用 const 来定义常量,也可以用 #define 来定义常量。但是前者比后
者有更多的优点:
1. const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不
到的错误(边际效应)。
2. 有些集成化的调试工具可以对 const常量进行调试,但是不能对宏常量进行调试。
3. const常量可被封装,但是define却不行
在 C++ 程序中只使用 const
常量而不使用宏常量,即 const 常量完全取代宏常量。
三.常量定义规则
(1)需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。
(2)如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。
例如:
const float RADIUS = 100;
const float DIAMETER = RADIUS * 2;
四.关于const变量是否分配内存
define常量是预处理阶段的工作,其不占据内存。但是const常量可能会占据内存,Const是用来替换define的,因此其必须能够放在头文件中,在C++中const变量是默认为内部链接的,即在其他文件中看不到本文件定义的const变量,因此链接不会出现问题。Const变量在定义的时候必须初始化,除非显式的指定其为extern的。
通常C++中会尽量避免为const变量分配内存storage的,而是在编译阶段将其保存在符号表symbol table中。当用extern修饰const变量或引用其地址时,将强制为其分配内存,因为extern表示采用外部链接,因此其必须有某个地址保存其值。
五.const的使用
1.const修饰函数参数与函数返回值。
2.const变量,指针,对象。类中的const成员:包括数据成员和函数成员。