再看const

insulted 2008-09-22 04:54:12

#include <iostream>
using namespace std;

int main()
{
int a;
const int c = 2;
cout<<"c is "<<c<<endl;
cout<<"c address is "<<&c<<endl;

int* p3 = const_cast<int*>(&c);
cout<<"p3 address is "<<p3<<endl;
cout<<"p3 is "<<*p3<<endl;
*p3 = 7;
a = c;
cout<<"p3 address is "<<p3<<endl;
cout<<"c address is "<<&c<<endl;
cout<<"c is "<<c<<endl;
cout<<"a is "<<a<<endl;
cout<<"new p3 is "<<*p3<<endl;
system("pause");
return 0;
}


在这里p3指向c的内存单元,通过p3修改了这个内存单元的值,但是通过c变量名字打印出来的结果却显示c变量保持了原来的值2(看来const的修饰很好很坚强!o(∩_∩)o...)
通过p3解引用打印出来的值是新的值7.
我单步跟了一下,发现其实c的值确实被修改了,但是打印出来确仍然坚持自己原来的值2。并且在单步跟的时候看到的c的“当时值”7赋给变量a,发现c仍然坚强的使用了自己原来的值2给了a。
哪位达人给个解释,不胜感激!
...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
OphoneOu 2008-09-22
  • 打赏
  • 举报
回复
你要是给分的话,又是一个技术狂热分子的话
我估计我让你从头爽到脚:什么叫常量折叠.
保证你满意为止.
OphoneOu 2008-09-22
  • 打赏
  • 举报
回复
星星多就是不一样...
JJZHK 2008-09-22
  • 打赏
  • 举报
回复
c的值没有改变,只是看到的是假象,只是不太清楚,为什么调试的时候c的值会变成7.
taodm 2008-09-22
  • 打赏
  • 举报
回复
google "常量折叠"
另外,扔了那些让你修改const数据的资料、书籍。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧