const 如何实现变量的不可修改
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")。有的编译器把常量放入只读内存页,只要你修改,硬件就会报一个异常,导致你程序崩溃。但是有些编译器不会把他们放入只读内存页,这种情况下你什么错误都不会遇到,除了你忽然发现你程序出现许多意想不到的错误而永远找不到原因
只读性以及其他很多属性,不是编译器应该知道或者“怎么知道”,而是你应该去知道和避免违背的规则。编译器不是完美的,它不可能替你做所有的事情,包括“常量不能被修改”的要求,是靠你而不是编译器去做到的