注册 登录
编程论坛 C++教室

const 常量与 真正的常量 有什么区别

Ghost_Knight 发布于 2011-04-20 15:43, 565 次点击
如题
4 回复
#2
rjsp2011-04-20 15:57
告诉你个名词“编译期常量”
顾名思义,在编译时就可以确定的值,才称为 编译期常量
#3
pangding2011-04-20 17:42
const常量 是“不应该改动的变量”的意思,也叫常量变量。真正的常量就是个定值,不是变量。
#4
qq10235692232011-04-20 18:32
const在定义的时候就必须赋值,而且以后不许改变其值!
#5
debroa7232011-04-20 22:26
一个小实验可以说明,const常量内存可改变,但不能改在编译期已经定下来的。
const int i = 1000;//声明定义常量
int t = i;//声明定义变量 编译时,它就变成了int t = 1000; 从汇编可以看到这一点
int* p = (int*)&i;//把常量内存地址赋给了p  *p为1000
*p = 10;//我改变了常量的内存地址,下面是不是赋值改变了呢?
//这时的*p为10
t = i;  //不好意思,t还是1000,并不是10,因为在编译时,这里就是 t = 1000,就好象是在编译期用1000替换了i
t = *p; //这时t才改变了。
上面代码并没有什么意义,只是为了更好的了解const,写好这些代码,在VC的调试状态下加断点,中断后进入反汇编
窗口,看这几句代码的汇编,如果了解一点汇编语言相信是很容易看出来,应该有i符号的地方,都被数字1000替换掉了
所以,const常量只是在编译期不可改变,在运行期通过指针可以间接改变常量所在内存的值,但这样做并没有什么实际
意义,除非有人用指针来调用const常量,那你就可以利用这一点做一些坏事儿。
1