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

     

      

  • 相关阅读:
    redis数据持久化
    redis安全:给redis设置密码
    redis命令总结
    redis事务
    redis发布订阅
    Java中的日期
    链式队列
    删除链表中的结点(链表)、比较含退格的字符串(栈)、棒球比赛(栈)
    物理层
    链式栈
  • 原文地址:https://www.cnblogs.com/yanghh/p/12944832.html
Copyright © 2020-2023  润新知