尝试强行修改const变量引出的话题

Posted on 2009-10-17 23:17  一有新人  阅读(413)  评论(0编辑  收藏  举报

先看原始代码

 

#include<iostream>
using namespace std;

void main(void

    
const int i = 0xffff;
    
int *= const_cast<int*>(&i);    //让p指向i的首地址
    *= 0x0000;
    cout
<<"i="<<i<<"  *p="<<*p<<endl;

 

结果并非如我所想

i=65535  *p=0

*p=0说明原先i所指内存确实被改变了,但是i=65535怎么解释呢?

原来编译器在编译的时候做了优化,它(编译器其实是很弱智的)认定我声明了const量后再不会改变,于是编译的时候“动了手脚”,将代码中出现该const量的地方替换成声明时候的值!给人感觉上就像一个宏替换的过程。

程序修改成这样后可以达到我原先的“企图”。

 

Code

i=0  *p=0

 

Copyright © 2024 一有新人
Powered by .NET 8.0 on Kubernetes