网络推荐

推荐给好友 上一篇 | 下一篇

const用法小结

!gi{-y(r-v3}const多次被面试宝典描述为只读;

`#h:V VJ/nBSD爱好者乐园(B8J:uZd V5t-BC

我想与其叫做只读就是根据他的保护作用来说的吧BSD爱好者乐园R`EzehS)u

Yq(wp9c:|#N9}const的使用需要注意的也就几种,在此可能仍然会有遗漏,因为这里并未涉及

T@2S Y.K z(YBSD爱好者乐园C!o6Jq~X^v

函数中使用问题,而是都是定义变量相关

h;b1ey,h8bk2c

.z1WU$P J4?sk9P(c1 const int i;

.I m9Xz~1dx4JBSD爱好者乐园?&Q7v!I?HA+o P-G

   这个与int const i;相同,然而简单的这样定义是错误的,原因是这样定义了

SC%[6g7J^.w3I&R M&aBSD爱好者乐园Oer-Y eTl

const变量需要初始化。所以这点切记。除非该变量是从另一处引用过来然后声BSD爱好者乐园 {j0Q*KH0St;y6R

(F9C0M9}6[ V}3|明,例如extern const int i;这样表明是变量的此处声明,如果写成externBSD爱好者乐园m&O nT3|i:o

"DMgJ(J-@ D3z Lconst int i = 0;反而会导致重新定义变量的错误。格外注意。BSD爱好者乐园ph+EjDh

[;h&c6?` jZ2 const int* pi;

-sB0foU1w

zV"UOL,M     这种定义可以从右边读,表示一个指向const修饰的int ,所以表示int是

:}L3d~b{_Ta

3Y4t.bV }$t_L;cconst的,而这里定义的pi是一个指针,所以并不需要初始化。值得注意的是BSD爱好者乐园P1y[p@H ?+Hi

/t-y_PH1q/Z X-m虽然用const来定义,但这个指针仍然可以执行非const变量。所以如果我们打算

}8X,uB P P$U/z}3x7PBSD爱好者乐园0g$B`d;\3Ur

修改所指向的变量的值还是可以的。BSD爱好者乐园.`6^[J%N_H

gA2^a {W]1_ Ge6l.q*t3 int *const pi;BSD爱好者乐园4l+D0Og4f;d

BSD爱好者乐园(["@kD-y9a}Z

      这种定义仍然从右边读,表示一个const指针to 整形,所以这个指针是BSD爱好者乐园8N1Z UWl| h

xa.S?'{/zconst类型,于是免不了麻烦我们将不得不将其初始化。与上面相似的是,这个指BSD爱好者乐园DP6okCP.iz

BSD爱好者乐园g d]!S/ETIU7Q+g

针仍旧可以指向一个非const变量。

I6f$Kl8Qq-Jf8F

m2N;i o:S0S%S4 最**的情况是这种 typedef int* pi;

S$T:R+l$p

8zgq{-or:x]  下面 pi const pI1;

6`QF.u3X:q\

fn H%ML5@0p+e/t   和    const pi pI2;

'QQlKx U ]

b`d H"S]/~ l   这两种情况都可以这样理解,tyedef就是新定义了类型,所以对应的pi我们可

2Utn6N1rmBSD爱好者乐园QoN#[1Lsu}P

以与处理基本类型一样处理,例如 const char ch和 char const ch这两种写法

9OH^\}@*_F-}RABSD爱好者乐园.c9FuS3?0b d'B

相同,而且都需要初始化,所以上面的两种写法的错误可见。

"Xo v,MP

hY)x-C*Z#t4O5Yr6M同时pi作为一个类型来讲,const修饰的是pi, 表示这个pi的性质是const的,BSD爱好者乐园 S"BBzmP

BSD爱好者乐园f7Jb MZnR S:C }f

也就是这个指针是“只读的”,所以展开来就成了  int *const pI1;BSD爱好者乐园FxE? c

BSD爱好者乐园4Z3}Yw,a0j

于是豁然开朗~~~BSD爱好者乐园KNHt+j

因为使用范围的限制,BSD方面文章更新速度不快,站长会坚持每天更新博客,欢迎访问!
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: const 总结
 

评分:0

我来说两句

seccode