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
- const_cast 如何实现的
- const_cast的使用方法
- const_cast的用法
- const_cast的应用
- 奇怪的const_cast
- 使用const_cast的时机
- const_cast 的问题
- const_cast 引发的问题
- const_cast的用法
- const_cast 的作用
- 关于const_cast的疑问
- const_cast的问题
- const_cast的应用
- const_cast的使用
- const_cast的应用
- const_cast的用法
- const_cast的用法
- const_cast的应用
- Github秘籍
- 《集体智慧编程》chapter1 recommendation2
- 大型网站架构不得不考虑的10个问题
- HDU 1008 Elevator
- 验证码倒计时
- const_cast 如何实现的
- 隐马尔科夫模型
- iOS下PDF显示
- 深入浅出RxJava——在Android中使用响应式编程
- 2016校招内推 -- 阿里巴巴前端 -- 四面面试经历
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- iOS UIDevice设备信息,传感器设置,横竖屏判断操作,手机电池操作
- Web报表工具JS开发之日期校验
- 【BZOJ3873】[Ahoi2014]拼图【分类讨论】【暴力】