当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·operator的问题    »显示摘要«
    摘要: primer中,c++的流览中出现operator 小弟不知其意思,望老鸟解惑,希望赋上几个例子, 并做出讲解。 ......
    摘要: 是专指exe文件叫pe文件吗?还是exe和dll文件都是pe文件!谢谢! ......


Why

#include   <iostream>  
  using   namespace   std   ;  
  int   main()  
  {  
      const   int   i   =   11   ;  
      const   int   *pi   =   &i   ;  
      int   *pi2   =   const_cast<int   *>(pi)   ;  
      *pi2   =   90   ;  
   
      cout   <<   &i   <<   \t   <<   i   <<   endl   ;  
      cout   <<   pi   <<   \t   <<   *pi   <<   endl   ;  
      cout   <<   pi2   <<\t<<   *pi2   <<   endl   ;  
   
      return   0   ;  
  }    
   
  vc6.0下的结果:  
   
  0012FF7C                 11  
  0012FF7C                 90  
  0012FF7C                 90  
  Press   any   key   to   continue  
   
  很不解?  
 

NO.1   作者: plainsong

是不是打开了编译优化了?  
  在优化时编译器有可能不知道*pi2   =   90   ;这句话改变了i的值,结果没有去重新从存储器中去取i的值,导致错误的结果。这是在VC里经常出现的一个编译优化Bug。  
 

NO.2   作者: shishiXP

编译器优化时,  
   
  把有些i替换为11。cout<<i     ->   cout<<11;  
   
  你又强行改变i,     所以其他是90  
 

NO.3   作者: thebigmouse

这个与常量的特性有关。  
  C++中,凡是使用直接常量的地方,编译的时候会用常量的值直接代换,所以  
  cout   <<   &i   <<   \t   <<   i   <<   endl   ;  
  相当于  
  cout   <<   &i   <<   \t   <<   11   <<   endl   ;  
  而常量却又真实的存储在内存中,所以可使用它的地址,在执行过程中可改变该地址中的内容而不会改变常量的值。


 ·在vc中怎样发送信使消息    »显示摘要«
    摘要: !! ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE