1、const的含义
const是“constant”的缩写,意思是“恒定不变的”,也就是说const定义的是常变量 = 恒定不变的变量 = 不能改变的变量。常变量只能使用,不能改写。
2、const的作用
(1)定义常量
const int a = 10;
(2)保护被修饰的变量,防止意外修改,增强程序的健壮性。例如在函数中用const修饰形参,则该形参在函数内不可修改,如果有改动则会报错
int f(const int data)
{
// return data++; 这种方式会报错
return data;
}
(3)方便参数的调整和更改,const同宏定义#define 一样,一变都变。
const 和 #define 两者有以下区别
a、编译器处理不同:#define是预编译指令,而const是普通变量的定义。#define定义的宏是在预处理阶段展开的,生命周期结束于编译时期,不能调试;而const定义的只读变量是在编译运行阶段使用,可以调试。
- const定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式。其他情况下它只是一个
const
限定的变量,不要将与常量混淆。
b、存储方式不同:#define定义的宏生命周期结束于编译时期,不占用内存(系统只会给变量分配内存);const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元,占用内存。从使用的角度看,用const定义的常变量具有宏的优点,而且使用更方便。
c、类型和安全检查不同:const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对const定义的对象进行安全检查,对宏定义则是字符串替换,不进行安全检查。
d、定义域不同:#define宏定义的作用域一定时全局的,而const定义的对象有全局和局部之分,如果在一个函数中用const定义了对象,则作用范围只限于这个函数。
(4)、可以节省空间,避免不必要的内存分配:const定义的对象在程序运行过程中只有一份拷贝,而#define
定义的常量在内存中有若干个拷贝。
#define PI 3.14159 //常量宏
const double Pi = 3.14159; //此时并未将Pi放入ROM中
double i = Pi; //此时为Pi分配内存,以后不再分配!
double I = PI; //编译期间进行宏替换,分配内存
double j = Pi; //没有内存分配
double J = PI; //再进行宏替换,又一次分配内存