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

const用法小结

BSD爱好者乐园5T"|eajtt;g

const多次被面试宝典描述为只读;BSD爱好者乐园"@r#s3EJi4b5p

BSD爱好者乐园&Brdb9y8`

我想与其叫做只读就是根据他的保护作用来说的吧BSD爱好者乐园e4yJT-{C2KzP4D0w

BSD爱好者乐园"z^"H S d8q{ LjH%?

const的使用需要注意的也就几种,在此可能仍然会有遗漏,因为这里并未涉及

v SX&O0v1oR1

mD3@K ? b1函数中使用问题,而是都是定义变量相关BSD爱好者乐园MC;K} M.}-T

BSD爱好者乐园4gP%]|F"b

1 const int i;

H Q | O'ym+XC v1BSD爱好者乐园7Um \pf'f;sxI

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

9`D9QeK0iZ&R:\1

h(R@ l1^*{j&mQ Fk1const变量需要初始化。所以这点切记。除非该变量是从另一处引用过来然后声BSD爱好者乐园_H`M#Pr~

\/j [ c K5h W1明,例如extern const int i;这样表明是变量的此处声明,如果写成extern

i S A i `#Y/?'J1BSD爱好者乐园Y0_ IbQ? M)Ea&Y

const int i = 0;反而会导致重新定义变量的错误。格外注意。

,D2?2}xG HFC5Q(]%d0k1

)cxE!NLN12 const int* pi;BSD爱好者乐园vl O+Et9Dk

BSD爱好者乐园dPB\.VB

     这种定义可以从右边读,表示一个指向const修饰的int ,所以表示int是BSD爱好者乐园2DR7m!a1J~}pn(Q

BSD爱好者乐园bmvQO4t

const的,而这里定义的pi是一个指针,所以并不需要初始化。值得注意的是BSD爱好者乐园/C W&]d-G$F

BSD爱好者乐园,g6|eP}T'J,t*F

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

l3v2q.M;PH1BSD爱好者乐园'A8KRv'^ wq v

修改所指向的变量的值还是可以的。BSD爱好者乐园tZK6@8E1m Y+Ge

BSD爱好者乐园+F"dXO$|A"C;G:Z

3 int *const pi;BSD爱好者乐园1_6HPY(V7eI6lc

BSD爱好者乐园zNE `z `"T3g

      这种定义仍然从右边读,表示一个const指针to 整形,所以这个指针是

/b0}`SY)R`h{1

Sfc3s? z5t H1const类型,于是免不了麻烦我们将不得不将其初始化。与上面相似的是,这个指

3W m*L,X,f.p{ f _bi1BSD爱好者乐园,FM]"zY;a

针仍旧可以指向一个非const变量。BSD爱好者乐园(Srh"Z9~-Zu Z5i([z

BSD爱好者乐园,D vuO)l l

4 最**的情况是这种 typedef int* pi;BSD爱好者乐园:k.@B`6FoHK8p

BSD爱好者乐园 @'?'r])K1cD

  下面 pi const pI1;

xD7y3Fq%~(q1

0S_5V3s9\SM1   和    const pi pI2;

jLV-T7[5B/v1Y1

&wDrz:G1   这两种情况都可以这样理解,tyedef就是新定义了类型,所以对应的pi我们可

BtF8o;^|1BSD爱好者乐园7w8S9]2AfCZ

以与处理基本类型一样处理,例如 const char ch和 char const ch这两种写法BSD爱好者乐园"CUA Hj[ O

-?A+q)[D&~ J*umE1相同,而且都需要初始化,所以上面的两种写法的错误可见。BSD爱好者乐园+b)lc#r1XxW$z [0{

BSD爱好者乐园b%a%bu}2vY1K

同时pi作为一个类型来讲,const修饰的是pi, 表示这个pi的性质是const的,BSD爱好者乐园4?O@ansE

BSD爱好者乐园%j ]\[*{I~

也就是这个指针是“只读的”,所以展开来就成了  int *const pI1;BSD爱好者乐园 ~C5cuFL.M-{i?

BSD爱好者乐园JvYE7C iU K

于是豁然开朗~~~BSD爱好者乐园fWJ'} cN0H [


[重要提醒]对本篇资料有疑问,请到论坛讨论,尽量使文章准确无误>>>
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: const 总结
 

评分:0

我来说两句

seccode