const限定符----C++初学之路

  /*以下是我自己的学习笔记,不能保证完全正确,希望能得到批评与教育*/

  周六看了会const,感觉自己是愚笨得,一章节大概四页得知识,自己一看就是看了两个小时。

  说说自己得情况,自己为什么看了两个小时,可能是自己理解得问题,自己一直在想,为什么c++中非得整个const得东西,我直接int a = 250 ;我不去修改不就行了吗。


以下总结下自己两个小时得收获。
  1. 为什么C++中要引入const,根据我得了解,计算机得最底层得指令,就是通过读取写入来控制整个计算机得运行。我还是喜欢打比方,计算机假设就是人,人是由我们大脑控制得,我们先从外界接收信息,好的,老师让我去罚站,那我大脑控制我走出教室站在门口。计算机接收外界信息,读取一个指令,然后计算,然后把结果写出来。那么我们作为人应该无条件接收这些信息吗,老师讨厌我,嫌我太调皮,你去死把,好的,我不可能去死,相反我可能回家告诉我爸,爸,老师让我去死,你帮我去揍他。比较到计算机中,有些东西,不可能你想改变它就改变得, 这个时候我们const来控制这个常量,我声明了,你就别给我改变它。
2. const得语法:在我得认识中,const运用有三个方面:
第一,常数变量,const int buf = 250;这个buf是不可更改。
第二,对常数的引用,这个因为我的愚笨,我觉得书本上的知识我不太了解这个常数引用有什么用,是因为自己学的还不够,所以不太了解,网上大神说的是”就会让不匹配的类型隐式转换成需要的常量类型” 出自知乎。
在C++prime中有个例子,double dval=3.14; const int &ri=dval; 书本中说到,这个在编译器中会形成这样的代码:const int temp=dval; const int &ri=temp;先是生成一个临时量来temp,来转换dval,再让ri绑定这个临时量。
3.这点我是接上面的 第三,因为我自己的理解,认为这里是最难读懂的,因为指针。
我的大部分时间都是在这两页纸张上,因为,这个文字游戏确实有点难懂,百度得出的是两个东西,一个叫做指针常量,一个叫做常量指针,说句实话,如果按照这样的约定来分辨这两个东西,我很容易弄错,所以我喜欢叫 对常量的指针和const指针。
3-1对常量的指针:先说说概念,就是一个指向常量的指针,具体就是要求不能通过这个指针来更改指针所指的对象,指针可以指向常量,也能指向非常量,另外,常量一定要指向常量的指针来指着。
const double pi = 3.14;
const double *cp = π这是正确的
*cp=250;错误,因为指向常量的指针最重要的就是不能通过指针来改变所指对象
3-2const指针:我认为这样叫它容易记下,特性:必须初始化,p不能改变。什么是p,这是我自己的理解,*p就是这个指针所指向地址的值,那么p就是这个地址。
int i1=0;
int *const i2=&i1; i2这个地址不能变化,也就是一直指着i1
这里我的理解是:指向常量的指针是不能修改*p,而const指针是不能修改p
那么上面这个例子,我们可以通过修改*p来修改它。
*i2=250;这是正确的。
3-3两者合二为一:两个东西合在一起,就是指向常量的常量指针。
const int i1 = 250;
const int *const i2 = &i1;这样,我就算*i2和i2都不能改变

  

  4.顶层const和底层const:

        在我自己的理解,可以分为三种类型:
4-1:最基本的常量:const int i=250;顶层const
4-2:指针本身是个常量,也就是const指针,OK,顶层const
4-3:指针所指的对象,也就是指向常量的指针,底层const
那么顶层const和底层const这个概念为什么要提出来,一定有某种用法,再prime书里面,有说,拷贝操作,大致意思就是,等号右边,被拷贝的东西,不会受到影响,根据我的理解,我感觉自己是对的,就是,拷贝的时候,底层const可以被用来当左边的值,顶层const不能,但是拷入和拷出,必须具有相同的底层const资格。
书中的例子:
int i = 0;
int *const p1 = &i;
const int ci = 42;
const int *p2 = &ci;
const int *const p3 = p2;
const int &r = ci;
int *p=p3;这是错误的,因为*p不具有底层const
p2 = p3;正确,因为p2是一个底层const
p2 = &i;正确,int*可以转换成const int*
int &r=ci; 错误,int&不能绑定到int上
const int &r2 = i;正确,const int&可以绑定到int上
也就是说,非常量可以转换成常量,反之不行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值