c++ 间接方式改变const变量
来源:互联网 发布:ubuntu 安装firefox 编辑:程序博客网 时间:2024/06/04 21:13
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段:
静态存储期变量,编译时刻,即能初始化的。
0 0
- c++ 间接方式改变const变量
- 《C专家编程》--改变const变量的值
- 改变const值的方式
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- C/C++中const变量与指针所指内容的改变
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- const变量的存储方式
- 教你改变const变量的值
- 强制改变const变量的结果
- const变量真的不能改变吗?
- C变量的直接引用与间接引用区别
- shell 变量间接引用
- 变量的间接引用
- Shell 间接变量问题
- C语言 const类型变量
- C语言修改const变量
- 寄存器间接寻址方式
- 寄存器间接寻址方式
- Vim简明教程
- java 的jdk与jre的作用和区别
- 安装SQL Server 2008 哪些功能需要选择?
- div的显示
- 嵌入式linux的网络编程(2)--TCP Server程序设计
- c++ 间接方式改变const变量
- 返回动态SQL语句中执行结果值
- Android Studio运行程序时显示apk not exists
- Mac 电脑设置 Apache2的虚拟主机
- 线程的sleep()方法和yield()方法有什么区别?
- 扩展linux分区
- 按固定时间间隔在Linux环境中运行java代码
- springMVC+ajax 文件上传 带进度条
- 与DevOps相关的一些概念:Trunk Based Development