検索

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

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

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

PHPzPHPz2807日前573

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

  • PHP中文网

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

    reinterpret_cast の目的はコンパイラーを騙すことであるため、その変換は解釈方法を変更するだけで、実際のデータは変更しません。t的类型是TYPE の場合、x=reinterpret_cast<>(t) は < と同等です。 🎜> *((TYPE*)(&x))=t を使用する場合int を float に変換するには、バイナリ データを完全にコピーするだけで、結果は無意味です... reinterpret_cast もちろん、一歩下がって、 を使用して目的のポインタを実現することもできます。 reinterpret_cast を変換します

    は型をチェックするため、組み込み型の変換に使用できます (たとえば、int から float へ、セマンティクスに従って変換できます)。ただし、ポインターの場合、それらは相互に通信できるようにするには、同じ継承ツリー上の型である必要があり、アップキャスト (サブクラスから基本クラスへ) のみが安全であることが保証されます。 static_cast

    とターゲット ポインターの間には継承関係がないため、明らかに char* または reinterpret_castC风格强转 のみを使用できます。

    質問者さんは最近メモリプールに悩んでいます...

    返事
    0
  • 阿神

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

    reinterpret_cast これは単なる再解釈であり、実際にはアドレス変換は含まれません。通常のポインタを変換する場合は問題ありませんが、親クラスと子クラスのポインタ間で変換する場合、結果が正しくない場合があります。

    返事
    0
  • キャンセル返事