关于const_cast 和 修改const 的值


/*
用法:const_cast<type_id> (expression)
  该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
  一、常量指针被转化成非常量指针,并且仍然指向原来的对象;
  二、常量引用被转换成非常量引用,并且仍然指向原来的对象;
  三、常量对象被转换成非常量对象。 
  type_id 必须为指针或引用
*/

#include <iostream>
using namespace std;

void test( char * hello){
	*hello = 'z' ;
	cout << hello<<endl;
}
void main(){

	const int ra = 54;
	const	int* w = &ra;
	int* e = const_cast<int* >(&ra);
	 e = (int*)(&ra);
	*e = 18;
	cout << *e ;//输出 18
	cout << ra <<endl; //输出 54 ,可以意外的发现,ra常量没有变化,难到e指向 的内存不是ra 
	cout << e <<endl <<&ra<<endl;  // 0012FF50   0012FF50 ,但发现其地址也是相同的 ,有点小奇怪
	string str("raooiang");
	char  * my = const_cast<char *>(str.c_str());
	
	char * cm = "sdfsg";
	//*cm = 'k' ; //访问错误

	const char * mycon = "sdfesf";
	const char * myc = str.c_str();
	//test(const_cast<char*>(mycon));	
//	cout << mycon<<endl;  //会出内在访问错误
	test(const_cast<char*>(myc));
	cout << myc <<endl;   //zaooiang
	cout << str.c_str() <<endl; //zaooiang  ,在这里可以发现str的内容改变了
}

参考: http://blog.csdn.net/sinshine/article/details/6743454

http://www.cnblogs.com/ider/archive/2011/07/22/cpp_cast_operator_part2.html


你可能感兴趣的:(关于const_cast 和 修改const 的值)