首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简单的C++有关问题,有趣

2012-03-08 
一个简单的C++问题,有趣!上代码:#include StdAfx.h#includeiostreamusing namespace stdvoid main(){

一个简单的C++问题,有趣!
上代码:

#include "StdAfx.h"
#include<iostream>
using namespace std;


void main()
{
const int i=5;
int *p=(int *)&i;
*p=6;
cout<<*p<<endl;
cout<<i;

}


输出的是6 与 5 ;  


我调试的时候单步跟踪,发现*p值为6,此时i的值也为6!


输出与调试不符?!能解释否?


用的VS2010!




[解决办法]
应该是编译器优化问题,因为正常的程序不会像你这么干的。
编译器假定const变量不会改变,所以会在寄存器或高速缓存中保存原来的值,在函数后来的使用时直接使用。

有一个办法保证输出肯定是你想要的,输出都是6。

代码如下:
void main()
{
volatile const int i=5;
int *p=(int *)&i;
*p=6;
cout<<*p<<endl;
cout<<i;
}

[解决办法]
google :
常量折叠.

由于编译器的一个优化动作,导致这样的结果.

结论:不要修改const 对象.
[解决办法]
google常量折叠

热点排行