1、定义常变量
const int a = 10; 此处a为只读变量
int a = 10; 此处a可读可写
int b = a; a做右值,可读
a = 100; a做左值。左值:放在“=(赋值符号)”左边,写权限(可写)
2、数据类型对于const是透明的
也就是说const是无视数据类型来定义常变量的
const int a 等同于 int const a
3、const直接修饰的内容不可做左值
①int const *cp1 = &a; const 修饰的是*cp1,
cp1 = &b;//ok 所以给cp1赋值为&b是可行的,
*cp1 = 20;//error 但是*cp1是只读的,所以赋值为20是错误的
② int *const cp2 = &a; 此处const修饰的是cp2,则cp2为只读
cp2 = &b;//error 给cp2赋值是错误的,
*cp2 = 20;//ok 给*cp2赋值是可行的
③int const*const cp4 = &a; 此处有两个const,分别修饰了cp4和*cp4
cp4 = &b;//error 所以此处给cp4赋值是错误的
*cp4 = 20;//error 给*cp4赋值也是错误的
4、权限的传递:同等或缩小传递合法
可以将范围大的值传递给范围小或范围一样的值,但是不能将范围小的传递给范围大的
int a = 10;// w r a可读可写
int b = 20;// w r b可读可写
int const ca = 100;// r ca只读,有写权限
int const cb = 200;// r cb只读,有写权限
int *p = &a; p的权限为可读可写
p = &ca;//error
int const *cp1 = &a; cp1可读可写,*cp1为只读,ca也是只读
cp1 = &ca;//ok
int *const cp2 = &a;
cp2 = &ca;//error
int *const cp3 = &ca;//error