C++ reinterpret_cast
        【摘要】 
                    
  
  reinterpret_cast 
  编辑
 
 
 
 
  reinterpret_cast是C++里的
  强制类型转换符。
  
 
 
 
 
  
   外文名
  
  
   reinterpret_cast
  
  
   隶    属
  
  
   C++语...
    
    
    
    -  
  reinterpret_cast编辑
   reinterpret_cast是C++里的 强制类型转换符。 
 
 
- 
   外文名 
  
- reinterpret_cast 隶 属
- C++语言
- 
   类    型 
  
- 强制类型转换符 作 用
- 把一个指针转换成一个整数等
简介
编辑
  reinterpret_cast<type-id> (expression) 
  type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。 
用法
编辑
  该运算符的用法比较多。 
  例如:int *n= new int ; 
  double *d=reinterpret_cast<double*> (n); 
  在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析。 
  因此, 需要谨慎使用 reinterpret_cast. 
  static_cast 与 reinterpret_cast 
  reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话) 
 static_cast和reinterpret_cast的区别主要在于 多重继承,比如 
| 
         1 
        
         2 
        
         3 
        
         4 
        
         5 
        
         6 
        
         7 
        
         8 
        
         9 
        
         10 
        
         11 
        | classA {    public:    intm_a;};classB {    public:    intm_b;};classC : publicA, publicB {}; | 
  那么对于以下代码: 
| 
         1 
        
         2 
        | C c;printf("%p, %p, %p", &c, reinterpret_cast<B*>(&c), static_cast<B*>(&c)); | 
  前两个的输出值是相同的,最后一个则会在原基础上偏移4个字节,这是因为 static_cast计算了父子类 指针转换的 偏移量,并将之转换到正确的地址(c里面有m_a,m_b,转换为B*指针后指到m_b处),而reinterpret_cast却不会做这一层转换。 
  因此, 你需要谨慎使用 reinterpret_cast. 
文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。
原文链接:yujiang.blog.csdn.net/article/details/53815745
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)