//**********************//类类型classB{public:intm_num;B():m_num(50){}};voidfoo(void){constB*b1=newB();B*b2=const_cast<B*>(b1);b2->m_num=200;cout<<"b1:"<<b1->m_num<<endl;//200cout<<"b2:"<<b2->m_num<<endl;//200constBb3;Bb4=const_cast<B&>(b3);b4.m_num=300;cout<<"b3:"<<b3.m_num<<endl;//50cout<<"b4:"<<b4.m_num<<endl;//300}//************************//

//************************//基本类型voidfoo(){constinta=100;int*p1=const_cast<int*>(&a);*p1=200;cout<<*p1<<endl;//200cout<<a<<endl;//100constint*p2=newint(100);int*p3=const_cast<int*>(p2);*p3=200;cout<<*p2<<endl;//200cout<<*p3<<endl;//200}//************************//

你会发现:

A:可以为基本类型或者类类型;

const A a;随便怎么修改a都不会变化

const A* p = new A();去掉p的const属性后,*p就变化了.


//*****************//classA{public:A(){m_num=1;}intm_num;};voidfoo(void){Aa;constA&r=a;Aa1=const_cast<A&>(a);a1.m_num=200;cout<<a1.m_num<<endl;//200cout<<a.m_num<<endl;//1}//****************//



const_cast<type-id>(expression)中,type-id只能为指针或引用,其他的都错,这个表达式即可以去除

expression中的const属性或volatil属性,还能增加const属性或者volatil属性

const int i = 10;

int i1 = const_cast<int>(i) //错误


增加const属性与volatil属性相反.