zoukankan      html  css  js  c++  java
  • reinterpret_cast

    reinterpret_cast_百度百科

    reinterpret_cast
    reinterpret_cast是C++里的强制类型转换符。
    操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。
    例如:int *n= new int ;
    double *d=reinterpret_cast<double*> (n);
    在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析。
    因此, 需要谨慎使用 reinterpret_cast.
    == ===========================================
    == static_cast .vs. reinterpret_cast
    == ================================================
    reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)
    static_cast和reinterpret_cast的区别主要在于多重继承,比如
    class A { public: int m_a; };
    class B { public: int m_b; };
    class C : public A, public B {};
    那么对于以下代码:
    C c;
    printf("%p, %p, %p\r\n", &c, reinterpret_cast<B*>(&c), static_cast <B*>(&c));
    前两个的输出值是相同的,最后一个则会在原基础上偏移4个字节,这是因为static_cast计算了父子类指针转换的偏移量,并将之转换到正确的地址(c里面有m_a,m_b,转换为B*指针后指到m_b处),而reinterpret_cast却不会做这一层转换。
    因此, 你需要谨慎使用 reinterpret_cast.

    扩展阅读:

            1

            http://hi.baidu.com/mlh2/blog/item/8004bc7feec1080e29388aa3.html
  • 相关阅读:
    Liunx命令集
    Jenkins,tomcat和jdk安装步骤
    《九悦学车》和《忠金融·惠生活》BUG表
    2020年12月17日总结
    思维导图加上测试用例
    2020年12月15日总结
    双肩包、椅子和电梯的测试用例(测试题)
    fastadmin 前台关联搜索
    composer安装阿里云短信
    php 生成订单号
  • 原文地址:https://www.cnblogs.com/lexus/p/2841441.html
Copyright © 2011-2022 走看看