免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1925 | 回复: 2
打印 上一主题 下一主题

[C++] 对const的误解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-13 12:33 |只看该作者 |倒序浏览
  1. int i = 12;
  2. const int *p=&i;
  3. i = 10;//ok
  4. *p=9;//error
复制代码
最好考虑一下上面p的声明中出现的const,这个饰词描述了通过p对i的操作的约束,而不是对于i的一般操作的约束。这里的常量性仅仅限制了我们通过p做什么事,这不表明i不会变,只是对它的修改不能通过p进行。也就是说,变量本身不具常量性,具有常量性的是通过指针反引用的那个能够作为左值的表达式。虽然这两者从观念上来看,是同一个对象。这就让我们理解,c++的常量性不是根据低级地址绑定的,而是富有高级的对象观念的。
如果我们再把问题说细一点,请看下面这个把const和volatile结合使用的例子:
  1. extern const volatile time_t clock;
复制代码
这个const饰词的存在表明我们未被允许(在代码中显式地直接)修改变量clock的值,但是同时存在volatile饰词说明clock的值肯定还是会通过其他途径发生变更。这个例子说明了c++里的常量性的观念只是限制了在代码中对const修饰的变量显式的直接修改,对于其他方式的修改,并不是c++语言常量性所要求的。

论坛徽章:
0
2 [报告]
发表于 2010-10-13 12:56 |只看该作者
c++ primer文中反复的强调只有通过常量初始化的const变量才能当常量用

论坛徽章:
0
3 [报告]
发表于 2010-10-13 14:35 |只看该作者
C也一样~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP