定义的const只读变量具有不可变性,但是不可作为数组的维数,也不可用于case之后。

const修饰的只读变量必须在定义的同时进行初始化。

编译器通常不会给普通const只读变量分配存储空间,而是将其保存在符号表中,这使得它成为一个编译期间的值,从而能给你减少不必要的内存分配,提高效率。

#define M 3            // 宏常量
const int N = 5; // 此时并未将 N 放入内存中
int i = N; // 此时给 N 分配内存,以后不再分配
int I = M; // 预编译期间进行宏替换,分配内存。
int j = N; // 没有进行内存分配
int J = M; // 再次进行宏替换,又一次分配内存

使用const关键字好处:

1、修饰变量,只读,同时进行初始化,之后此常量再也不改变,能够节省空间,避免没必要要的内存空间分配,提升效率。

2、修饰数组,定义或者说明一个只读数组。

3、修饰指针,能够指定指针自己为const,也能够指定指针所指的数据为const,或两者同时指定为const。

const int *p;            // p可变,p指向的对象不可变。
int const *p; // p可变,p指向的对象不可变。
int * const p; // p不可变,p指向的对象可变。
const int * const p; // 指针p和p指向的对象都不可变。

4、修饰函数的参数,能够防止参数意外改动,增加程序的健壮性。

5、修饰函数的返回值,返回值为const型,不能做为左值。