如题, 不同类型的指针应该算是相同的吗?
因为本质上都是地址, 那么按理来说应该是static cast, 但是由于指针类型不同好像又是应该用reinterpret cast,所以这种情况下该用哪种类型转换呢?
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_cast
C风格强转
のみを使用できます。
阿神2017-04-17 14:25:45
reinterpret_cast
これは単なる再解釈であり、実際にはアドレス変換は含まれません。通常のポインタを変換する場合は問題ありませんが、親クラスと子クラスのポインタ間で変換する場合、結果が正しくない場合があります。