揭开 const 的神秘面纱

const: 变量

int main()

{

int a=10;  //可读可写

int b;

b=a;  //a的读取权限>b

a=20; //a的写权限

左值: 放在赋值符号的左边


1.const: 定义常变量,将变量变成只读型的

int ca=10;  //可读可写

const int ca=10;  //加上const后,变成了只读型

ca=10;  //error 不可更改,赋值,所以不可以把10赋给a

const int ba; //error 局部变量默认值随机值

如果是  static int sa=10;  

                    sa=20; //是可以的,因为static:静态,可以更改

2.数据类型对于const而言是透明的

const int *p1=&a;  

char const*p1=&a;

int *const p1=&a;

在程序中,数据类型对于const而言是透明的,以上是三个例子中,不管怎么写,整形int型或者字符char型都没有对const造成影响,const修饰的仍然是 p1.

3.const修饰的是它的直接右边 (直接右边不可以做左值)

例如:const int*p1=&a;  //p1保存变量a的地址

                        p1=&b; //ok 

                       *p1=200  //error

  因为数据类型视为透明,const的直接右边是 *p1并不是p1; 因为直接右边不可以做左值,所以*p1不可以进行更改赋值为200,但是解引用后,p1却可以保存变量a的值.

4.const 的权限可以同等或者缩小权限传递,但是不可以放大传递

比如你在图书馆借了一本书,此时你拥有了对这本书的只读权限,并不能进行涂画修改,没有可读权限。那么如果你的同学向你借这一本书,你可以借给他,但是告诉他也不能进行涂画修改,所以此时你两的权限一样,同为只读型,便为同等传递权限,但是你自己都不能涂改那么你肯定不能让你同学涂改(不能放大权限传递);如果你有一本书,是你自己买的,你可以随意翻看或者涂改,此时你拥有可读可写权限,那么这时你借给你同学书,你便可以有权限让他只翻看(缩小权限传递)或者可以 又能翻看和涂改(同等传递).

整体举例

int main()

{

int a=10;

int b=20;    //可读可写

const int ca=10;

const int ba=20;   //只读

int *p=&a;

p=&b;   //*p=100; 

p=&ca;  //error ,*p=100 

const int *p1=&a;

p1=&ca;

*p1=100;   //error

int *const p2=&a;

int *const p3=&ca;  //error  constd都直接右边 p3不可以更改,ca也不可以更改,所以项错误

猜你喜欢

转载自blog.csdn.net/qq_41321905/article/details/79935684