Saya sedikit bingung dengan penerapan reinterpret_cast
vs static_cast
. Dari apa yang saya baca aturan umum adalah dengan menggunakan pemeran statis ketika jenis dapat ditafsirkan pada waktu kompilasi maka kata itu static
. Ini adalah pemeran yang digunakan kompilator C ++ secara internal untuk pemeran implisit juga.
reinterpret_cast
s berlaku dalam dua skenario:
- mengkonversi tipe integer ke tipe pointer dan sebaliknya
- konversi satu tipe pointer ke yang lain. Ide umum yang saya dapatkan adalah ini tidak dapat diangkut dan harus dihindari.
Di mana saya sedikit bingung adalah salah satu penggunaan yang saya butuhkan, saya memanggil C ++ dari C dan kode C perlu berpegang pada objek C ++ jadi pada dasarnya ia memegang a void*
. Para pemeran apa yang harus digunakan untuk mengkonversi antara tipe void *
dan Class?
Saya telah melihat penggunaan keduanya static_cast
dan reinterpret_cast
? Meskipun dari apa yang saya baca tampaknya static
lebih baik karena para pemain dapat terjadi pada waktu kompilasi? Meskipun dikatakan menggunakan reinterpret_cast
untuk mengkonversi dari satu jenis pointer ke yang lain?
reinterpret_cast
tidak terjadi pada saat run time. Keduanya adalah pernyataan waktu kompilasi. Dari en.cppreference.com/w/cpp/language/reinterpret_cast : "Tidak seperti static_cast, tetapi seperti const_cast, ekspresi reinterpret_cast tidak dapat dikompilasi dengan instruksi CPU apa pun. Ini hanyalah arahan kompiler yang memerintahkan kompiler untuk memerintahkan urutan bit (representasi objek) ekspresi seolah-olah memiliki tipe new_type. "