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

恒量折叠

2012-08-08 
常量折叠今天看到一个关于常量折叠的帖子,地址在下面http://blog.csdn.net/yby4769250/article/details/73

常量折叠
今天看到一个关于常量折叠的帖子,地址在下面
http://blog.csdn.net/yby4769250/article/details/7359278

然后自己做了个实验,代码如下↓

class A
{
public:
A(int i=1,int j=2):a(i),b(j)
{};
void fun()
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;

int *a1 = (int*)&(a);
*a1 = 5;
int *b1 = (int*)&(b);
*b1 = 6;

cout<<&a<<"="<<a<<endl<<a1<<"="<<*a1<<endl;
cout<<&b<<"="<<b<<endl<<b1<<"="<<*b1<<endl;
}
private:
const int a;
const int b;
};

int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.fun();

system("PAUSE");
return 0;
}
// 这段代码执行的结果如下,const成员的值被修改了,请问如何解释
a=1
b=2
5
5
6
6
请按任意键继续. . .

[解决办法]
我觉得是这样的:
不对const取地址的时候,const保存在常量表中。
当对const取地址的时候编译器就会为其分配内存空间,a1,b1只是指向这段内存空间的指针,而且不具备const性。
当然就可以修改内存空间值。至于是在什么地方分配的,我不知道。

以上都是依编译器而决定,都不是c++的范畴。

热点排行