尝试强行修改const变量引出的话题
来源:优易学  2010-1-14 18:54:08   【优易学:中国教育考试门户网】   资料下载   IT书店

  先看原始代码

  #include<iostream>

  using namespace std;

  void main(void)

  {

  const int i = 0xffff;

  int *p = const_cast<int*>(&i);    //让p指向i的首地址

  *p = 0x0000;

  cout<<"i="<<i<<"  *p="<<*p<<endl;

  }

  结果并非如我所想

  i=65535  *p=0

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

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

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

  Code

  #include<iostream>

  using namespace std;

  void main(void)

  {

  int tmp;

  cin>>tmp;

  const int i = tmp;

  int *p = const_cast<int*>(&i);    //让p指向i的首地址

  *p = 0x0000;

  cout<<"i="<<i<<"  *p="<<*p<<endl;

  }

  i=0  *p=0

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训