概述
顶层const:修饰对象本身
底层const:修饰指着所指对象,或者引用的对象
所以引用是底层的,指针即可是底层也可是顶层,int等非指针类型是顶层的。
总的原则是拷贝对象时,等号右边的对象的顶层const可以忽略,底层的const不行,等号左边的const都没有影响。当涉及指针所指内容,或者引用时,要求类型相同,除了两个例外(非常量可以赋值给常量,派生类对象赋值给基类指针或引用)。
1、不涉及指针,引用时,是拷贝对象本身,并不会影响原来的对象,所有的const都是底层,所以全部可以忽略(要求除了const的类型相同,或者可以转换)。
int a=0;
const int b=1;
a=b;
b=a;
2、指针的顶层const可以忽略,底层const必须考虑,不允许等号右边底层const等号左边非底层const,允许等号右边非底层const左边是底层const。
int*const p1=&a;
int*p2=&b;
p1=p2;
p2=p1;
const int *const p3=&a;
p1=p3;//错误!!!
3、引用全部是顶层const,不允许等号右边是常量(相当于底层const)等号左边非底层const,允许等号右边是非常量(相当于非底层const)左边是底层const。
const int c=0;
int &r=c;//错误!!!
const int&r1=a;
还有一个要注意的,引用的除了const外的类型不能转化!
int d=0;
double &r2=d;//错误!!!
因为类型不一致,会先生成temp临时变量,但是写作引用的本意就是使用r2来修改d,这样通过r2只能修改temp,没有意义,所以编译器就把这样的写法定义成错误!
转载于:https://www.cnblogs.com/zhangyee/p/4864128.html
最后
以上就是时尚金鱼为你收集整理的const拷贝的全部内容,希望文章能够帮你解决const拷贝所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复