浅谈const

来源:互联网 发布:android7.0源码百度云 编辑:程序博客网 时间:2024/05/18 01:40

今天我们来谈谈const限定符。关键字const是用来对变量的类型加以限定,它的值不能被改变。

因为const对象一旦创建之后就不能再改变,所以const对象必须被初始化。例

const int k=42;//正确,编译时初始化

const int k=get_size();//正确,运行时初始化,它的值取决于get_size()的返回值,且不再改变。

const跟大多数的对象一样,在默认状态下,const对象仅在文件内有效。程序在编译时,把该变量都替换成对应的值,所以const对象只有在当前文件有效,所以不同文件内有相同名字的const对象也没关系。但是如果希望该const对象在其他文件有效,则需要用extern关键字声明。

接下来我们来看看const的引用即常量的引用。常量的引用不能用作修改它所绑定的对象,而且不能用一个非常量引用指向一个常量对象但是允许将常量引用绑定到普通的对象上。例

const int c=1024;

int &r1=c;//错误,不能用非常亮引用指向一个常量对象。

总之,记住一句。既然是const对象,那么就不能直接通过操作该对象进行修改(也就是可以通过其他非const对象改变,见下例)。其他禁忌跟普通应用类似。

int i=42;

int &r1=i;

const int &r2=i;

r1=2;

//此时i、r1、r2的值全部被修改成为2!!!!!!

最后我们再来说说很容易弄混的【指向常量的指针】和【常量指针】。

故名思义,指向常量的指针就是我们不能直接通过该指针改变它所指的对象(同样要明白的是所指的对象可以通过别的途径改变如下例)。而该指针式用来存放常量对象的地址。

const double pi=3.14;

double *ptr=π//普通指针不能指向常量对象

const double *cptr=π//正确

double dval=3.12;

cptr=&dval;//通过dval来改变*cptr的值,所以也是正确的。

现在我们来看看常量指针是什么吧。

它代表的是指针本身不变而不是指向的对象不变。写出的形式如下:

int *const curerr=&errnumb;

同样的道理,常量指针不代表着不能改变所指对象的值,而是不能通过该指针改变所指对象的值。例如在上一行代码的前提下加上:

*curerr=123;//此时指针curerr所指对象的值已经改变,但是该语句正确。

————————————————————————————

仔细类比指向常量的指针和常量指针,我们可以通过const的位置来判断在该语句中到底是所指向的对象还是该指针本身的值不变呢?

const int *p ,类似这种时就是表示*p是const.我们可以通过操作p来改变p指向的对象的值

int *const p,类似这种时就是表示p是const,我们可以通过操作*p来改变p指向的对象的值

最后再稍微提一点顶层const和底层const.

顶层const表示指针本身是个常量;底层const表示指针所指的对象是个常量。通过之前的const的学习我们可以自己归纳。如:

int i=0;

int *const p1=&i;//p1是个常量,为顶层const

const int ci=42;//ci不能变,为顶层const

const int *p2=&ci;//*p2不能变,为底层const




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 痛经痛的很厉害怎么办 工作第一天被辞怎么办 第一天练车紧张怎么办 到新公司第一天怎么办 我妈上班别人欺负怎么办 欺负别人他妈来找了怎么办 家人都欺负我妈怎么办 人老了日不动了怎么办? 日照职业技术学院公租房怎么办留宿 眼镜上沾了胶水怎么办 近视镜片刮花了怎么办 墨镜镜片磨花了怎么办 邻居养狗味道大怎么办 邻居不让养狗了怎么办 养狗地板有味道怎么办 狗狗嘴巴被大狗咬肿了怎么办 花了钱心里难受怎么办 狗在屋里有味道怎么办 养狗家里有异味怎么办 养狗房子有味道怎么办 狗身上有腥臭味怎么办 狗狗不想养了怎么办 药流2天后没出血怎么办 药流当天血多怎么办 怀孕四十天不想要怎么办 人流后出血量大怎么办 药流一直不出血怎么办 药流一直不见红怎么办 药流12天还流血怎么办? 把别人车刮了怎么办 车划掉漆了怎么办啊 倒车时碰了车怎么办 车头掉了一点漆怎么办 新买的车被刮了怎么办 白色车车头漆掉了一小块怎么办 临时牌照丢了1张怎么办 临牌遗失了一张怎么办 临牌只有一张了怎么办 临时牌丢了一个怎么办 药流出血特别多怎么办 新车刮擦了一点怎么办