我是靠谱客的博主 时尚金鱼,最近开发中收集的这篇文章主要介绍const拷贝,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

const拷贝

顶层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,没有意义,所以编译器就把这样的写法定义成错误!

posted on 2015-10-09 15:38 zhangyee 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/zhangyee/p/4864128.html

最后

以上就是时尚金鱼为你收集整理的const拷贝的全部内容,希望文章能够帮你解决const拷贝所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部