c++中const用法的理解

来源:互联网 发布:淘宝天猫国际图标图片 编辑:程序博客网 时间:2024/06/16 17:27

这次主要是在定义变量的时候,欢迎大家指正~

 

a)


const 和int的顺序规律。似乎只要是const 和int连接在一起的时候,效果都是等价的,即是说const int a=100;等价于int const a=100;(注意的是这里的常量必须初始化!)。同时const int *a=&b;等价于int const *a=&b;不过不知道是不是都满足这个规律,得查查具体编译器的语法规则。

 

小总结一句:前后顺序都一样,两个连一起意义不变!

 

b)

 

比较容易混淆的是const语句中带有指针或者引用。例如const int *p;(据上面的规律等同于int const *p;) p=&ad;(当然事先申明一下ad,不过ad可以是常量也可以是变量),那么我们的“不变性”保持在哪儿呢?关键就在我们不可能通过p去修改ad的值,也就是说ad对于p来说是常量,但是你可以单独对ad修改,也可以单独对p修改,就是不能用p去动ad。(汗...那我们得思考一下什么时候该这么个用法了~感觉是不是在某些扫描数据的场合你不想让数据被误修改的时候这么定义可以呢?即让你的数据对指针绝缘,成为只读的?但是又不影响你自身数据库合法程序对数据的修改,指针又能按顺序移动查看连续的数据~应该是这样的吧~)


一小句总结:数对仅指针来说是常量,两个可以分开变!

 

c)

 

相比之下,int * const则不同了,在用的时候必须初始化,即应该与申明一起初始化,这个可是常量指针啊。如果只是int * const h;则会出错,而且测试在vc6的环境下你所指向的变量对象必须是在这个句子之前就声明过的例如int m=123;int * const h=&m;这种用法可以单独改变m的值,但是同上面的一点不一样,即可以通过h改变m的值。例如(*h)++;则改变m为124了。注意一定不能少括号,因为优先级的问题,意义就不同了。那么少了括号的最终问题处在哪呢?是在重新定位h的时候,会警告你要h是个常指针,即它的指向一定不能改变。

 

总结一小句:前面可以变后面,但是前面自己的值一定不变。

 

 


CONST用法第一步总结:变量一定可以单独变不受指针约束(看起来很蠢的结论,不然怎么叫变量呢...)晕。。。

 

其他的有时间再补上,请大家看看这些有没问题~

原创粉丝点击