c++ 间接方式改变const变量
2016-05-16 18:18
459 查看
indirect change const variable
使用const_cast<>可以将指向const变量的指针(或引用),转换为非const指针(或引用)。那么,通过使用转换后的指针或引用可以改变const变量的值吗?c++ 标准里说,通过这种方式改变变量的值,将会产生undefined的结果。
所以,对于不同的编译器,往往有不同的实现方法。
本文分析的是gcc的实现,其实,大多数编译器都是以这种方式实现的。
how do?
我们知道,const变量的初始化可能发生在两个阶段,编译时刻,运行时刻。const int X;
如果是在编译时刻(或者在编译时刻,即可确定const变量的值的时候),在编译时,将所有使用X值的地方,替换为X的常量值;所有,使用X地址的地方,按普通常量处理。
如果是在运行时刻决定,所有用到X的地方,编译出来的指令,与正常变量没有区别。
能不能运行?
至于能不能运行,要看,这个变量存在什么地方,如果存在.rodata段,那么,改变这个变量,会报错(运行时错误)。但是,如果不是在.rodata段,就不会报错。什么情况下,变量会存在.rodata段:
静态存储期变量,编译时刻,即能初始化的。相关文章推荐
- C语言中关于除法和取余的理解
- 一些用到过的C 函数
- C语言二分查找法实现与细节
- inline!C++内联
- C/C++中nth_element函数
- C++中的const函数与const_cast的矛盾
- PAT (Basic Level) Practise (中文)1050. 螺旋矩阵(25)
- CRC32校验算法C语言版(查表法)
- stdint--ISO C99: 7.18 Integer typesC语言扩展类型
- C语言的数据类型转换
- JS下打印三角形(其实和C语言一样的套路)
- 简化版的SHA1算法C语言版
- c语言:图的邻接矩阵的建立与广度优先搜索实现
- Template Method模式理解
- opencl:c++接口(cl.hpp)利用cl::LocalSpaceArg设置__local 参数
- 详解一道C++笔试题,考察重载、覆盖、多态
- C++利用链栈实现表达式求值
- c语言libcurl库的异步用法
- c++ 单例模式下的实例自动销毁(单例自动回收器)
- C++回收回收