/*
用法: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的内容改变了
}
因篇幅问题不能全部显示,请点此查看更多更全内容