时间:2021-05-20
1、常量
1.1、常量的初始化:
const对象一旦创建后其值就不能再改变,所以const对象必须初始化。这里我们要注意一点,像const int *p和const int &r都并不是const对象。因为const int *p只是表示不能通过p改变p所指的对象的值,p的值是可以变的,所以p可以不用初始化。至于r ,引用本身就不是对象,所以r也并不是const对象,r之所以一定初始化,是因为引用必须初始化。对于以上内容,你也可以理解为底层const 修饰的并不是const对象,还要注意像const int *const p1这种,这是一定要初始化的,这是const对象,因为它有一个顶层const。
1.1.1分清了const对象后,让我们先把目光聚集到const对象这里。
const对象可以分为大致三类:
const int m int *const p const int *const q而这前两类都可以用来给非const对象或者const对象初始化,因为这前两类都是顶层const,初始化时的拷贝是不会对他们的自身值做出什么改变,即以下代码均正确。
//第一类int m1=m;//正确const int m2=m;//正确//第二类int *p1=p;//正确int *const p2=p;//正确const int *p3=p;//正确const int *const p4=p;//正确而第三类则需要我们注意一下,因为第三类还有一个底层const。
const int *const q
底层const有一个限制:当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const。
我们可以这样理解:const int *const q如果可以拷贝初始化给q1、q2,那么意味着我们可以通过q1、q1来改变q所指的对象的值,那这样q的底层const还有什么意义呢?
以上,是说这三类可以给哪些对象初始化,现在我们看看哪些可以给这三类初始化
第一类const int m
//以下一些变量不初始化,我把重点落在类型。int m1;const int m2;const int m=m1;//正确const int m=m2;//正确第二类int *const p
//以下一些变量不初始化,我把重点落在类型。int *p1;int *const p2;const int *p3;const int *const p4;int *const p=p1;//正确int *const p=p2;//正确int *const p=p3;//错误int *const p=p4;//错误这里的报错同样因为底层const有一个限制:当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const
第三类 const int *const q
//以下一些变量不初始化,我把重点落在类型。int *q1;int *const q2;const int *q3;const int *const q4;const int *const q=q1;//正确const int *const q=q2;//正确const int *const q=q3;//正确const int *const q=q4;//正确1.1.2 现在让我们把目光转回非const对象的初始化
这里主要有两类:
先考虑他们可以给哪些对象初始化
第一类 const int *p
此处同样由于低层const的限制
第二类 const int &r
//以下一些变量不初始化,我把重点落在类型。int &r1=r;//错误const int &r2=r;//正确这里强调一下,引用不是对象,所以没有像 int *const &r或者const int *const &r这种形式
好,再考虑哪些可以给他们初始化
第一类 const int *p
因为const int *p意义在于表明不可以通过p改变它所指的对象的值,这个对象可以不是常量,只是p所指的对象对于p来说是常量,所以它所指的对象是否const 其实并没有关系。
第二类 const int &r
//以下一些变量不初始化,我把重点落在类型。int &r1;const int &r2;const int &r=r1;//正确const int &r=r2;//正确这里const同样是指不能通过r改变它所引用的对象,所以它所引用的对象本身是不是const无关紧要。
纵观以上的错误,都是试图把底层const拷贝初始化给没有底层const的对象。
以上就是关于涉及到常量的指针和引用的初始化的解释了。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1:常量指针与指针常量常量指针与指针常量名字很接近,但是两者区别很大。常量指针是指指向常量的指针,例如:charconst*st[4]="str";或者使用下面
C语言可执行代码结构名称内容代码段可执行代码、字符串常量数据段已初始化全局变量、已初始化全局静态变量、局部静态变量、常量数据BSS段未初始化全局变量,未初始化全
C++中引用和指针的关系实例详解1.引用在定义时必须初始化,指针没有要求int&rNum;//未初始化不能通过编译int*pNum;//可以2.一旦一个引用被初
目录(作用): 1:修饰变量,说明该变量不可以被改变; 2:修饰指针,分为只想常量的指针和自身是常量的指针 3:修饰引用,指向常量的引用,用于修饰形参,即
C++this指针详解this是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址)。通过this,可以访问当前对象的成员变量和成员