qq群里 2013年6月24日晚 友人提出问题:
#include <stdio.h>
int main ()
{
const int iCount = 10;
int &iTempConst = const_cast<int &>(iCount);
iTempConst = 20;
printf("%d %d \n",&iCount,&iTempConst);
printf("%d __%d\n",iCount,iTempConst);
return 0;
}
---------
输出结果
1638208 1638208
10 __20 //iCount 显示的值是10, 但内存上是20
-----------------------------------------
真相:http://tieba.baidu.com/p/167952665
引用
编译器遇到const变量时,用立即数代替,/*volatile 和 const 是冲突的,如果在const 中使用volatile 那么volatile 是没有作用的,volatile 的真正作用是,在任何使用int i ,变量的时候,都去取地址,读地址的值,*/
只要是const定义的变量,并且这个变量是用立即数初始化的,那么在使用这个变量的时候,编译器一定是用立即数代替
也就是说,产生了宏的效果
---------------------------------
const_cast<type_id>(expression)
(度娘)用来修改类型的const属性,除了const 或者volatile修饰之外,type_id 和 expression 的类型是一样的。
处理后的变量,可以通过地址访问其真实的值,
------------
知识拓展:
1,立即数,--汇编语言
通常把在立即寻址方式指令中给出的数称为立即数。
立即数位数不定,该数值紧跟在<操作码>之后。
2,操作码,
指令系统的每一条指令都有一个操作码,它表示该指令应进行什么性质的操作。
3,volatile
http://blog.chinaunix.net/uid-790666-id-2547805.html
---------------------------------------------------------------
感想,对于一个菜鸟来说,发现一个问题,后面还有好多问题等着你,编程这条路,需要慢慢走