zoukankan      html  css  js  c++  java
  • 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属性,禁止在指针或引用的类型转换中移除。

  • 相关阅读:
    [CISCN2019 华北赛区 Day1 Web2]ikun
    [BJDCTF 2nd]简单注入
    [BJDCTF2020]ZJCTF,不过如此
    [BJDCTF2020]The mystery of ip
    [SWPU2019]Web1
    [WesternCTF2018]shrine
    [BJDCTF 2nd]假猪套天下第一
    [BJDCTF2020]Mark loves cat
    [GWCTF 2019]我有一个数据库
    C语言学习笔记_函数与函数库
  • 原文地址:https://www.cnblogs.com/ymy124/p/3643601.html
Copyright © 2011-2022 走看看