您的位置:首页 > 编程语言 > C语言/C++

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段:

静态存储期变量,编译时刻,即能初始化的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: