看以下代码const int t = 10;
int* aa = (int*)&t;
*aa= 100;aa应该指向了t所在的内存。t是分配了内存的
在VC中观察内存显示t是被改变了的
但是在使用t时,其值并没有改变
刚接触c++,其中原理不是太清楚
各位大虾能不能给解释一下其中的原因

解决方案 »

  1.   

    t应该等于100,const只是编译的时候起作用,如果强制类型转换,也可以改变它的值。使用t的时候值没有变,可能是因为编译优化的结果,把用到t的地方都用常数10代替。
      

  2.   

    const int t = 10;
    // 这一句声明了一个常量t,编译器一般不对t分配内存地址,而是在编译之前
    // 将把所有的t都替换成10int* aa = (int*)&t;
    // 这一句是因为要和c兼容的原因才被允许的,编译器为t分配了内存,并用10
    // 初始化*aa= 100;
    // 为t分配的内存的值变为100, ,但这并不影响预编译过程中用10替换t