const关键字:可改不可改?
可改不可改?
常量表达式
是指在编译器编译时期就可以的到值的表达式,例如:const int a = 3
,虽然听起来很简单,但实际上很容易犯错。本文简要总结它们的不同:
创新互联服务项目包括张家口网站建设、张家口网站制作、张家口网页制作以及张家口网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,张家口网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到张家口省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
关于const:顶层const和底层const
一般,我们声明const用来存储不变的恒定量:
const int MAXN = int_max;
用指针指向:
const int *pMAXN = &MAXN;
这条语句开始的const int
实际上是为了MAXN
的类型做出的匹配,我们得到的pMAXN
实际上是可修改的。
那么如何让 pMAXN 不可修改呢?
c++采用’双const‘的方法:
const int * const pMAXN = &MAXN;
这样,pMAXN
成为了不可修改值的,指向MAXN
的指针。
其中,可以修改值的const就被称为底层const,而不可修改值的称为顶层const。
const int *pMAXN = &MAXN; //底层const
const int * const pMAXN = &MAXN; //左边底层const,右边顶层const
typedef的误区
很显然,当我们使用typedef的时候,const又产生了问题:
typedef char *pstring;
const pstring *ps;
在有上面的语句的基础上,这条语句是什么意思?
const pstring cstr = 0;
一般情况下,我们看到pstring
就会直接去找它的定义,这种习惯是错误的!我们应该按照次序,先读这条语句。
首先,pstring
加上了const
修饰符,这代表定义的语句是const状态,是常量表达式。其次,pstring
定义的是指向char
类型的指针,所以,综上所述,这条语句声明了一个指向char
的常量指针
即,指针的值不可修改。
那这一条语句呢:
const char *cstr = 0;
它声明了一个指向const char
类型的指针。指针的值可以修改。
分享标题:const关键字:可改不可改?
链接URL:http://pwwzsj.com/article/dsoippc.html