- 复习顶层const与底层const
顶层const对任意类型都适用,表示所修饰对象为常量
底层const则与指针和引用等复合类型基本类型部分有关
1)顶层const
如const int a 、int * const p 都属于顶层const
int* const p中 const修饰p,表示p为常量,而p内存储的是所指向对象的地址,地址不能被改变即不能改变指针的指向。
2)底层const
如const int * p 、const int &r等表示底层const
(注意与const int a区分)
此时,const修饰p所指向的对象为常量,不可改变所指对象,但可以改变指针本身,即可以改变指针的指向。
2.形参中的顶层const分为两种情况
1)形参为非指针类型
此时,TestA与TestB的函数是等价的,TestB会忽略形参中的const属性,因为形参只是临时量,只是实参的副本,函数调用结束后就会被销毁,因此形参是否是常量不会影响主调函数及实参,但若是形参是指针或者引用时就会对实参产生影响。
2)形参为指针类型
形参为引用时,为底层const不能忽略,因此不作论述。
TestA时,形参为顶层const指不能修改tmp指针的指向,但调用函数会传入一个实参,即指定了tmp的指向,此时的const没有实际意义,因此会被忽略。(指针作为形参的初衷就是为了间接修改或传递实参,不需要改变指向)
TestB时,形参为顶层const指传入对象不能被改变,即形参指针所指对象应为常量,在函数体内就不能通过形参间接修改对象,具有实际意义。因此,底层const不能被忽略。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)