c++中的const常量

来源:互联网 发布:h3c 查看端口ip 编辑:程序博客网 时间:2024/06/05 14:45
#include <iostream>#include <stdlib.h>using namespace std;int main(){int perv;const int a = 1;int next;int *p = (int *)&a;*p = 5;// c++编译器对一般const常量不分配存储空间,而是将他们保存在符号表中,使他们真正成为编译期间的一个常量// 没有了存储与读内存的操作,这使其效率更高。// 当然,我们在此基础上也可为const常量分配空间,也可以使用一些技巧修改所分配空间里的内容// 但这并不会改变const常量在符号表内的值,因为那是编译期间就确定的。// 对于const int a = 1; // a , *&a ,*(&a), *(const int *)&a,这样的语句经过编译器优化后都以 a 的形式出现,编译器会到符号表中// 找到相应的常量并代换进去,为编译期间常量。// 修改const对应的内存空间内容(这是另一个位置)。修改方法://         【1】*(otherType *)&a      , 改变指针类型信息,这样的语句编译器再无法优化只能当作表达式处理//         【2】*(&a + num - num)   , 表达式cout << "a     = " << a << endl << "*&a   = " << *&a << endl << "*(&a) = " << *(&a) << endl << "*(const int *)&a = " << *(const int *)&a << endl << "*(int *)&a       = " << *(int *)&a << endl << "*(int *)(const double *)&a = " << *(int *)(const double *)&a << endl << "*(const int *)(int *)&a    = " << *(const int *)(int *)&a << endl << "*(&a + 1 - 1)    = " << *(&a + 1 - 1) << endl << endl << "*p    = " << *p << endl << "*(const int *)p  = " << *(const int *)p << endl << "------------------------------------------------" << endl << "&perv  = " << &perv << endl << "&a     = " << &a << endl  << "&next  = " << &next << endl << "&p     = " << &p << endl << "(int *)&a       = " << (int *)&a << endl << "(const int *)&a = " << (const int *)&a << endl << "&perv - &a = " << (int)&perv - (int)&a << endl << "&a - &next = " << (int)&a - (int)&next << endl << "------------------------------------------------" << endl << "*(p + 1) = " << (int *)*(p + 1) << endl << "*(p + 2) = " << (int *)*(p + 2) << endl  << endl;/*char *ch = "abcd";               // const char * 到 char *的转换。这样的转换是为了对c的向下兼容cout << "ch = " << ch << endl;ch[0] = 'A';cout << "ch = " << ch << endl;   // 对于文字常量区的内容,我们没有权限修改*/system("pause");return 0;}

 
原创粉丝点击