我也不知道const是如何行事的,非常诡异,今天我就碰见了。
说 被const修饰的变量不能被改变。但是经常在面试的时候,面试官会诡异的笑笑,然后说,其实也能。。。
那我们今天就来看看是怎么更改的。
以上的代码,运行一下会非常诡异,(我是在gcc下编译的)。地址一样,但是却从地址所指内存中得到了不同的值!这是为什么那?我也不知道,(是不是一个在寄存器中读出来的,一个是从内存中读出的?)先在此做个标记,查明再补充。
ps: const int 所声明的变量在栈中。
const static int 所声明的变量在 字符串常量区,不能修改,如上例子中,如果给成const static int ,那么会在运行时出现段错误。
哈哈,贴到cu上,大牛给我解释了一下,大意是这样的,const在C和C++中不太一样,如果上述代码给成c版本的,i值照样能改变,但是不会出现同地址不同值的怪异问题了。在C中const只是编译期的事情,实际值会改变。而在C++中,const 值会在整个文件中被替换(注意,这个替换是在编译期间作的,所以在运行期间对变量值的改变实际上确实改变了,但是我们看不到。),有点像#define i 10,也就是说,在C++中const更像const 了。