C++中const的使用

const就是为了表述“不变化的值”这样一个概念,这在一些实际的问题环境中非常有用。例如:
1.许多对象在初始化之后就不需要再改变自己的值
2.与使用文字量相比(字面常量),采用符号常量写出的代码更容易维护
3.指针常常是边读边移动,而不是边写边移动,STL中const迭代器就是很好的例子
4.许多函数的参数是只读的,C标准库中就有很多这样的函数,例如strcpy,strcat,strlen
const int model;
注意上面的声明是错的,因为常量不允许赋值,所以常量必须初始化,应该是这样:
const int model = 90;
如果你再这样的话:
model = 100;
编译会报错,原因如上。
下面三种形式的声明,初学者很容易弄糊涂:
1. const char * ptr = "hello world";
2. char * const ptr = "hello world";
3. const char * const ptr = "hello world";
注意字面常量"hello world"类型是 const char[12],由于C/C++历史久远,char * ptr = "hello world";这样的初始化是可以的,为了兼容成千上万老的C/C++代码必须这么做,现在的主流编译器都破例允许,但要知道这种实情。
不信的话你定义一个函数:void function(char * ptr){...}
你给它传一个"hello world"编译的时候马上报告类型不匹配,看看编译器的错误提示信息立马你就会明白。这也是为什么strcpy, strcat等函数的参数定义成const char *的原因之一,要不我连"hello world"的参数都不能传就太不方便了。
转入正题,那上面三种声明应该怎么去理解呢?看我的:
1.定义了一个指向("hello world")字符串的指针,指针指向的内容是不能更改的,但是你可以改变指针的指向
2.定义了一个指针常量,就是指针的指向是不能更改的,内容就随便啦
3.这种就是前两种的并集,即兼有上面两者的特性
如果实在记不住他们的区别,C++鼻祖介绍的好方法就是,从右到左读它的声明,注意该用上英语了,例如:
1. ptr is a pointer to char const
2. ptr is a const pointer to char
3. ptr is a const pointer to char const
记住规则就行,随着对语言的理解加深,很多语法可以通过已有的规则去推导,这时就不用记规则了,不过C++里面的特性太多,有时还是需要翻翻C++大师Bjarne Stroustrup那本大部(C++程序设计语言)。(好累呀,敲字难,努力想把问题说清楚,感觉自己说不清楚,其实还有好多没说,嘿嘿)还有就是变量的地址和常量地址都可以赋给指向常量的指针,而指向常量的指针是不能赋值给普通指针,这个编译期就通不过。这两句话可能太笼统了,但是要说明起来需通过代码,我懒得写了。
今天就说到这吧,我的表达欲望已经充分得到了满足,以后写的时候我得想想怎么写代码例子说明问题了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值