首頁  >  問答  >  主體

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

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

PHPzPHPz2764 天前554

全部回覆(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_castC风格强转

    話說題主最近在跟內存池較勁哈…

    回覆
    0
  • 阿神

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

    reinterpret_cast只是進行重新解釋,並沒有實際涉及到地址的變換。在普通指標轉換的時候是沒有問題的,但是在父子類別指標之間轉換的時候,可能是不正確的結果。

    回覆
    0
  • 取消回覆