关于const是否分配空间和常量折叠的问题

来源:互联网 发布:厦门广电网络数字电视 编辑:程序博客网 时间:2024/05/18 00:14
#include <iostream>
#include <stdlib.h>

using namespace std;
void main() {

const int a = 5;

*(int*)&a = 4;

cout << "是否有地址&a:   " << &a << endl << endl;

cout << "内存的值是否修改*(int*)&a:   " << *(int*)&a << endl << endl;

cout << "符号是否变化a:   " << a << endl << endl;

cout << "解释一下:" << "const int a在编译时期符号a就全部被替换成了5,所以即使用强转指针修改内存也不会改变符号a的值,这是常量折叠导致的!" << endl;

system("pause");
}

在VC6.0中甚至可以直接对对象a直接进行(int)a强转内存空间类型的操作直接修改对象a的值,可见const修饰的对象是分配过内存空间的,但是在编译过后通过常量折叠的方法直接把符号a对应位置的内容全部替换为了初始化时的值,所以修改内存改变不了符号a的值!


1 0
原创粉丝点击