读书人

求解疑惑关于Const值尝试修改的有关

发布时间: 2012-09-02 21:00:34 作者: rapoo

求解疑惑,关于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”,也就是说,你还是没有取到常量的地址。不知道我说明白了吗

读书人网 >C++

热点推荐