如题, 不同类型的指针应该算是相同的吗?因为本质上都是地址, 那么按理来说应该是static cast, 但是由于指针类型不同好像又是应该用reinterpret cast,所以这种情况下该用哪种类型转换呢?
学习是最好的投资!
reinterpret_cast の目的はコンパイラーを騙すことであるため、その変換は解釈方法を変更するだけで、実際のデータは変更しません。t的类型是TYPE の場合、x=reinterpret_cast<>(t) は *((TYPE*)(&x))=t を使用する場合int を float に変換するには、バイナリ データを完全にコピーするだけで、結果は無意味です... reinterpret_cast もちろん、一歩下がって、 を使用して目的のポインタを実現することもできます。 reinterpret_cast を変換します
reinterpret_cast
t的类型是TYPE
x=reinterpret_cast<>(t)
*((TYPE*)(&x))=t
は型をチェックするため、組み込み型の変換に使用できます (たとえば、int から float へ、セマンティクスに従って変換できます)。ただし、ポインターの場合、それらは相互に通信できるようにするには、同じ継承ツリー上の型である必要があり、アップキャスト (サブクラスから基本クラスへ) のみが安全であることが保証されます。 static_cast
static_cast
とターゲット ポインターの間には継承関係がないため、明らかに char* または reinterpret_castC风格强转 のみを使用できます。
char*
C风格强转
reinterpret_cast これは単なる再解釈であり、実際にはアドレス変換は含まれません。通常のポインタを変換する場合は問題ありませんが、親クラスと子クラスのポインタ間で変換する場合、結果が正しくない場合があります。
と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风格强转
のみを使用できます。reinterpret_cast
これは単なる再解釈であり、実際にはアドレス変換は含まれません。通常のポインタを変換する場合は問題ありませんが、親クラスと子クラスのポインタ間で変換する場合、結果が正しくない場合があります。