const 常类型是指使用类型修饰符 const 说明的类型,常类型的变量或对象的值是不能被更新的。
const 的使用:
1. 定义常量
(1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。
TYPE const ValueName = value;
const TYPE ValueName = value;
即常变量,只能读,没有写权限,不能作为左值被修改。
(注:a. 数据类型对于 const 是透明的,例如 const int a = 100; 等同于 int const a = 100;
b. 常变量必须被初始化,例如 const int b;这个语句是错误的。)
(2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.
extend const int ValueName = value;
2. 指针使用 const
(1)指针本身是常量不可变
(int*) const p;
const (int*) p;
(2)指针所指向的内容是常量不可变
const (int) *p;
(int) const *p;
(3)两者都不可变
const int* const p;
(4)还有其中区别方法,沿着*号划一条线:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
例:
a. const int *cp1 = &a;
cp1 = &b; //ok *cp1 = 1000; //error
b. int const *cp2 = &a; //等同于a
cp2 = &b; //ok *cp2 = 1000; //error
c. int * const cp3 = &a;
cp3 = &b; //error *cp3 = 1000; //ok
d. const int * const cp4 = &a;
cp4 = &b; //error *cp4 = 1000; //error