const的使用
const:定义常变量,不能写,只读。
a、数据类型对于const而言是透明的。
例如:
const int a = 100;
int const a = 100;
const可以放在数据类型的两侧,两者是等价的。
b、const 用于封锁直接修饰的内容,并将该内容的属性变为只读
例如:
int const*p1 = &a; const 直接修饰 *p1 ,所以 *p1以后不能作为左值存在,即 p1之后不能再进行解引用了,即该语句导致:只能修改指针p1指向的地址,不能改变该地址保存的值
p1 = &a; //正确
*p1 = 200; //错误
1、 int const *const p3 = &a;
2、 p3 = &b; //错误
3、 *p3 = 100; //错误
语句 1 该语句导致不能对p3 进行任何修改,因p3 和 *p3 皆不能作为左值
c、权限可以同等或者缩小传递,绝对不能放大传递
例如:
int a = 10;
int b = 20;
const int ca = 10; // const 修饰ca使其不能作为左值,即ca只具有读权限,不能对其进行写入
const int cb = 20; /同上
int *p = &a;
p= &ca; //错误,ca只具有读权限,p具有读、写两权限,有可能通过对 p 解引用修改ca的值
const int *cp1 = &a; //正确,const直接修饰*cp1,使其不能作为左值,所以cp不能解引用,但可以改变cp1所指向的地址
cp1= &b; //正确
cp1= &ca; //正确
const int *cp2 = &ca; //正确。该句导致cp2不能解引用,也就不用担心会通过解引用修改ca的值。
int *const cp3 =&ca; //错误。该句const直接修饰cp3,cp3不能做左值,但可以对cp3解引用,可能修改ca的值,可ca不能写入,所以错误