首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

const 如何实现变量的不可修改

2012-02-17 
const 怎么实现变量的不可修改const int a7程序怎么知道那块内存不可修改?[解决办法]const仅对编译器有

const 怎么实现变量的不可修改
const int a=7;

程序怎么知道那块内存不可修改?

[解决办法]
const仅对编译器有效。
严格来说,const不是“不可修改”,而是告诉编译器:我的程序不应该去修改。
如果编译器发现程序企图修改这个变量,就会报错。
有些情况下,const变量有可能被编译器以外的东西修改,比如硬件中断,等等。
所以volatile const也是有可能的。

[解决办法]
只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。
[解决办法]

探讨
const仅对编译器有效。
严格来说,const不是“不可修改”,而是告诉编译器:我的程序不应该去修改。
如果编译器发现程序企图修改这个变量,就会报错。
有些情况下,const变量有可能被编译器以外的东西修改,比如硬件中断,等等。
所以volatile const也是有可能的。

[解决办法]
编译器在编译你程序时知道它时常量,任何显式的修改都导致编译错误(因为编译器知道它是常量)

至于隐式的修改,一般是由于一些不规范的代码引起的(如char * p = "abcde")。有的编译器把常量放入只读内存页,只要你修改,硬件就会报一个异常,导致你程序崩溃。但是有些编译器不会把他们放入只读内存页,这种情况下你什么错误都不会遇到,除了你忽然发现你程序出现许多意想不到的错误而永远找不到原因


只读性以及其他很多属性,不是编译器应该知道或者“怎么知道”,而是你应该去知道和避免违背的规则。编译器不是完美的,它不可能替你做所有的事情,包括“常量不能被修改”的要求,是靠你而不是编译器去做到的

热点排行