求解疑惑,关于Const值尝试修改的问题
- C/C++ code
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还是没有修改,可是内存地址都是映射到一块上呢?
[解决办法]
尝试修改const 变量的行为未定义.
你可以再发帖解惑什么是未定义行为 .
[解决办法]
那是编译器的问题,调试查看内存里面内容有没有改变就知道了
[解决办法]
可以参看这个帖子
http://bbs.51cto.com/thread-926860-1.html
[解决办法]
我也问过这个问题
“常量展开”
[解决办法]
当然,你可以写个函数
- C/C++ code
void print(int const * ptr){ cout << *ptr << endl;}
[解决办法]
百度一下“常量折叠”
[解决办法]
定义了一个 const int ival=100;是一个常量,
但是int *ptr=const_cast<int *>(&ival);你取到的地址由编译器给你换了一个值与ival相同的另一个“副本ival”,也就是说,你还是没有取到常量的地址。不知道我说明白了吗