const_cast 如何实现的

来源:互联网 发布:手机复制软件下载 编辑:程序博客网 时间:2024/05/14 23:55

在c++里面,类型之间的转换是要检查的,但是指针之间的类型的转换并不检查原来的类型,例如下面的代码:(const_cast实现的原理)

int main(){const  int constant = 21;int* modifier = (int*)(&constant);*modifier = 22;cout<<constant<<endl;cout<< *modifier <<endl;cout<< modifier << " " << &constant <<endl;}

是可以编译通过的,但是发现,这两个值得地址是一样的,但是里面的内容欧冠不一样,虽然是用了-O0禁止编译器优化,但是,编译器还是给优化了,然后我们加上volatile关键字:

int main(){const  volatile int constant = 21;int* modifier = (int*)(&constant);*modifier = 22;cout<<constant<<endl;cout<< *modifier <<endl;cout<< modifier << " " << &constant <<endl;}

发现值还是21和22,也就是说,编译器还是给忽略了(凉风2级,心里爽歪歪)。但是有的编译器是会很乖地改变,比如vs2000。

还有一点,const 修饰的全局变量存在于rodata 区,也就是符号表区域,对其向上面的代码对它进行修改是会segmentfault的。

const修饰的局部变量是存放在栈上面的。


参考:http://blog.chinaunix.net/uid-17283404-id-5260150.html

http://blog.csdn.net/zz460833359/article/details/48917217

0 0