现在的位置: 首页 > 综合 > 正文

c++中的const常量

2018年02月07日 ⁄ 综合 ⁄ 共 1386字 ⁄ 字号 评论关闭
#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;
}

 

抱歉!评论已关闭.