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常量:其是放在符号表中,可能分配存储空间,也可能不分配存储空间 ,使用&符号时候才分配一个临时内存空间。

 

  

 

原文链接: https://www.cnblogs.com/yanghh/p/12944832.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C和C++中const的区别

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/350298

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:15
下一篇 2023年3月2日 上午6:15

相关推荐