ホームページ  >  に質問  >  本文

C++不同指针直接互相转换用static cast还是reinterpret cast?

如题, 不同类型的指针应该算是相同的吗?
因为本质上都是地址, 那么按理来说应该是static cast, 但是由于指针类型不同好像又是应该用reinterpret cast,所以这种情况下该用哪种类型转换呢?

PHPzPHPz2764日前553

全員に返信(2)返信します

  • PHP中文网

    PHP中文网2017-04-17 14:25:45

    慎用reinterpret_cast,因为这货发明出来的目的就是用来忽悠编译器的,他的转换仅仅是更改了解释方式,而对实际数据没有任何更改,如果t的类型是TYPE,那么x=reinterpret_cast<>(t)相当于*((TYPE*)(&x))=t,如果你用reinterpret_cast去把一个int转换到float,那它只是把二进制数据完完整整拷贝了一遍,得到的结果并没有什么意义……当然退一步讲,用reinterpret_cast当然可以实现你想要的指针转换

    static_cast会检查类型,所以可以用于内置类型的转换(比如从int到float就能按照语义进行转换),但如果是对于指针,必须是同一棵继承树上的类型才能互相转换,并且只有上行转换(从子类到基类)才是保证安全的。

    既然你的char*和目标指针并没有啥继承关系,那么显然只能用reinterpret_cast或者C风格强转

    话说题主最近在和内存池较劲哈……

    返事
    0
  • 阿神

    阿神2017-04-17 14:25:45

    reinterpret_cast仅仅是进行重新解释,并没有实际涉及到地址的变换。在普通指针转换的时候是没有问题的,但是在父子类指针之间转换的时候,可能是不正确的结果。

    返事
    0
  • キャンセル返事