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