使用const修饰变量意味着其只读的,但是C语言的const和C++中const确有着很大的不同。
C语言const是“冒牌货”,而C++中的是一个真正的常量。
C语言中虽然我们不能直接修改const变量的值,但是可以通过获取变量的地址通过指针来间接修改。
下面这个C语言程序,a先后输出的值为5和6。
int main() { const int a = 5; printf("a修改前:%d ",a); int *p = (int *)&a; *p = 6; printf("a修改后:%d ",a); return 0; }
上面这个例子说明:C语言中const常量,其实只是只读变量,有自己的储空间,能通过地址间接修改其的值。
那C++中的const有什么不同呢?
同样用C++编译器执行上述代码,a先后输出的值均为5。
解释:当碰见常量声明时,C++在编译期间就把该变量放到符号表内,符号表里的一项key=a, val=5。在运行的时候,如果用到a,就直接从符号表中取值。
int *p = (int *)&a;
对于这行代码,C++编译器会插入一段代码,运行时为a单独开辟一块内存空间,相当于指针p指向这一段内存空间,你把这个空间内的值无论改成多少,都
和符号表中的5没有任何关系,所以第二次仍然输出5。
结论:C++中的const常量:其是放在符号表中,可能分配存储空间,也可能不分配存储空间 ,使用&符号时候才分配一个临时内存空间。