C和C++中const的区别

使用const修饰变量意味着其只读的,但是C语言的const和C++中const确有着很大的不同。

C语言const是“冒牌货”,而C++中的是一个真正的常量。

C语言中虽然我们不能直接修改const变量的值,但是可以通过获取变量的地址通过指针来间接修改。

下面这个C语言程序,a先后输出的值为5和6。

int main()
{   
    const int a = 5;    
    printf("a修改前:%d \n",a);
    int *p = (int *)&a;  
    *p = 6;     
    printf("a修改后:%d \n",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常量:其是放在符号表中,可能分配存储空间,也可能不分配存储空间 ,使用&符号时候才分配一个临时内存空间。

 

  

猜你喜欢

转载自www.cnblogs.com/yanghh/p/12944832.html