求解疑惑,关于Const值尝试修改的问题

刀刀亮 2012-08-07 04:25:29

const int ival=100;
int *ptr=const_cast<int *>(&ival);
cout<<*ptr<<endl;
*ptr=99;
cout<<"*ptr:"<<*ptr<<endl;
cout<<"ival:"<<ival<<endl;
cout<<"ival Address:"<<&ival<<endl;
cout<<"*ptr Address:"<<ptr<<endl;

为毛我修改了值了以后,发现ival还是没有修改,可是内存地址都是映射到一块上呢?
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
刀刀亮 2012-08-10
  • 打赏
  • 举报
回复
谢谢了
titer1 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

尝试修改const 变量的行为未定义.

你可以再发帖解惑什么是未定义行为 .
[/Quote]

顶起,好的说法就是这样。
冰与火 2012-08-09
  • 打赏
  • 举报
回复
定义了一个 const int ival=100;是一个常量,
但是int *ptr=const_cast<int *>(&ival);你取到的地址由编译器给你换了一个值与ival相同的另一个“副本ival”,也就是说,你还是没有取到常量的地址。不知道我说明白了吗
rmaly 2012-08-09
  • 打赏
  • 举报
回复
百度一下“常量折叠”
可见一斑 2012-08-07
  • 打赏
  • 举报
回复
当然,你可以写个函数

void print(int const * ptr)
{
cout << *ptr << endl;
}


然后print(&ival);
竞天问 2012-08-07
  • 打赏
  • 举报
回复
我也问过这个问题

“常量展开”
tbinjiayou 2012-08-07
  • 打赏
  • 举报
回复
可以参看这个帖子
http://bbs.51cto.com/thread-926860-1.html
sevancheng 2012-08-07
  • 打赏
  • 举报
回复
那是编译器的问题,调试查看内存里面内容有没有改变就知道了
iamnobody 2012-08-07
  • 打赏
  • 举报
回复
尝试修改const 变量的行为未定义.

你可以再发帖解惑什么是未定义行为 .
可见一斑 2012-08-07
  • 打赏
  • 举报
回复
cout<<"ival:"<<ival<<endl;这句话中ival在编译的时候已经被替换为字面值了。
相当于写了:
cout<<"ival:"<<100<<endl;

64,654

社区成员

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

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