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