免费注册 查看新帖 |

Chinaunix

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

请教关于const的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-28 09:42 |只看该作者 |倒序浏览
在C++ Primer第四版的178页上看到关于const的描述:
允许把非const对象的地址赋给指向const对象的指针,例如:
      const double *cptr;              //cptr may point to a double that is const
      double dval = 3.14;              //dval is a double;its value can be changed
        cptr = &dval;                       //ok:but can't change dval through cptr
尽管dval不是const对象,但任何企图通过指针cptr修改其值的行为都会导致编译时的错误。
上面的是书上的内容,我给照抄下来的,但是我在做测试的时候,是可以通过指针cptr修改dval的值:例如:
     dval = *cptr + 2;
请大家帮忙解释一下,我用的编译器是:
g++ (GCC) 4.6.1 20110626 (prerelease)
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

论坛徽章:
0
2 [报告]
发表于 2011-12-28 09:51 |只看该作者
*cptr只是通过cptr读取了dval的值,真正改变dval的值是通过对dval直接赋值完成的。

你可以试试*cptr = 啥的,肯定不行。

论坛徽章:
0
3 [报告]
发表于 2011-12-28 10:02 |只看该作者
liwangli1983 发表于 2011-12-28 09:51
*cptr只是通过cptr读取了dval的值,真正改变dval的值是通过对dval直接赋值完成的。

你可以试试*cptr = 啥 ...


经你这么一指点,我明白了,多谢!
确实如你所说这样的,之前我对“尽管dval不是const对象,但任何企图通过指针cptr修改其值的行为都会导致编译时的错误。”这句话理解不正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP