教你改变const变量的值

来源:互联网 发布:美即和一叶子知乎 编辑:程序博客网 时间:2024/06/05 04:03

呵呵,应该很多人做过这个事,好奇心来了没办法,不过可不能用在实际编程上哟

不记得哪位大师说过:试图欺骗编译器的人终会自食恶果。

不过要说明下,用const修饰的变量(这是一个假常量),本质上其实和未用const修饰的变量是没有差别的

用const修饰变量后,只是编译器会检查是否对该变量进行了写操作,若检查出则会报错

代码如下:

#include<iostream>using namespace std;int main(int argc,char* argv[]){const int a=3;const int *pt=&a;int tmp=(int)pt;int* pt1=(int*)tmp;*pt1=100;// 仍然输出的是3,这跟从寄存器中取值有关cout<<a<<endl;// 输出100,因为是从内存中取得的值cout<<*pt<<endl;// 同上cout<<*pt1<<endl;cin.get();cin.get();return 0;}


 

如果想让cout<<a; 也输出100,可以在const int a=3;及const int *pt=&a;前面加上volatile关键字以保证数据每次都从内存中读取
原创粉丝点击