• C++:const_cast类型转换


    针对const_cast,太多人在用同一个示例问同一个问题:
    void main(){
       const int a = 3;
       const int *pc = &a;
       int *p = const_cast<int *>(&a);
       *p = 5;
       printf("%d,%d,%d",*p,*pc,a); //结果是 5,5,3
    }
    最终输出的a,为何是3而不是5?
    C++对用const定义的常数变量,不是靠地址空间中的内容来取数的,而是靠保存在符号表中的索引来取数的,因此常数变量a无论什么情况下使用都是常数3。
    事实上,变量a地址空间中的内容确实是5,但即使你*(&a)来取数仍是3。你可以这样来取变量a地址空间中的内容:
      const int *d = &a;
      printf("%d ", *d);

      int d = const_cast<int>(&a);
      printf("%d ", *(int *)d);
    此时输出的结果是5。

    上述问题都是针对单变量常数而言的,对于结构或类,const_cast的使用与你的直观理解是无出入的。
    C++提供了去除const或volatile属性的const_cast类型转换,使你可以对一常数变量进行修改,问题是你的设计为什么会导致非要对一常数变量进行修改呢?
    C++的编程准则:const或volatile属性,禁止在指针或引用的类型转换中移除。

  • 相关阅读:
    JavaScript访问ab页面定时跳转代码
    http协议相关-待续
    curl发送get和post请求
    Java入门——动态网页jsp(jdk下载和配置环境变量)
    LeetCode:Best Time to Buy and Sell Stock
    LeetCode:Reverse Integer
    LeetCode:Same Tree
    LeetCode:Single Number II
    LeetCode:Single Number
    LeetCode:Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/ymy124/p/3643601.html
Copyright © 2020-2023  润新知