读书人

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

发布时间: 2012-03-08 13:30:13 作者: rapoo

一个简单的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常量折叠

读书人网 >C++

热点推荐