关于const_cast

const_cast操作符可以强置去除const指针的const属性。但对简单变量,程序往往作出优化。

如下面的程序:

class A{
public:
 int a;
 A():a(1){}
};
int main(){
 const int a=1;
 int* b=const_cast<int*>(&a);
 *b=2;
 cout<<*a<<endl;

 const A ca=A();
    A* cb=const_cast<A*>(&ca);
 cb->a=2;
 cout<<ca.a<<endl;
}

结果输出:

1

2

而如果对简单变量new到堆上的话,就可以改掉原来的值了

class A{
public:
 int a;
 A():a(1){}
};
int main(){
 const int* a=new int(1);
 int* b=const_cast<int*>(a);
 *b=2;
 cout<<*a<<endl;

 const A ca=A();
    A* cb=const_cast<A*>(&ca);
 cb->a=2;
 cout<<ca.a<<endl;
}

程序结果为:

原文地址:https://www.cnblogs.com/CUCmehp/p/1373596.html