C++不同指针直接互相转换用static cast还是reinterpret cast?
PHPz
PHPz 2017-04-17 14:23:45
0
2
563

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

PHPz
PHPz

学习是最好的投资!

全員に返信(2)
Ty80

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
阿神

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート