Dalam bahasa pengaturcaraan C, reinterpret_cast dan static_cast berfungsi sebagai pengendali penghantaran untuk menukar data daripada satu jenis kepada yang lain. Walau bagaimanapun, kebolehgunaannya berbeza berdasarkan mekanisme asasnya.
Static_Cast
Static_cast digunakan apabila penukaran antara jenis diketahui pada masa penyusunan. Ia melakukan penukaran jenis tersirat, seperti menukar antara jenis data yang serasi, termasuk jenis terbina dalam (cth., int kepada dua kali ganda) dan jenis kelas yang berkaitan (cth., kelas asas kepada kelas terbitan). Static_cast memastikan keselamatan jenis dengan mengesahkan bahawa penukaran adalah sah sebelum melaksanakan kod.
Reinterpret_Cast
Reinterpret_cast digunakan untuk penukaran yang lebih kompleks yang tidak dapat ditentukan pada masa penyusunan. Ia membenarkan penukaran jenis antara penunjuk dan integer, serta antara jenis penunjuk yang berbeza. Walau bagaimanapun, reinterpret_cast tidak melakukan semakan jenis, yang bermaksud ia boleh mengakibatkan tingkah laku tidak ditentukan jika penukaran tidak sah.
Senario Aplikasi untuk Penunjuk Tidak Sah
Apabila antara muka dengan Kod C dari C , selalunya perlu untuk menghantar objek antara dua bahasa. Kod C mungkin perlu menyimpan rujukan kepada objek C, yang boleh disimpan sebagai penunjuk lompang.
Untuk menukar antara penunjuk lompang dan jenis kelas C, reinterpret_cast harus digunakan kerana penukaran tidak diketahui pada masa penyusunan. Kod C biasanya menyimpan alamat objek C dalam penuding kosong, dan kod C kemudiannya boleh menggunakan reinterpret_cast untuk menukar penuding kosong kembali kepada jenis kelas asal, mengekalkan objek itu alamat.
Contoh
int* i = new int(42); void* v = reinterpret_cast<void*>(i); int* i2 = reinterpret_cast<int*>(v); // i2 and i point to the same memory
Awas
Walaupun reinterpret_cast memberikan lebih fleksibiliti, ia harus digunakan dengan berhati-hati kerana ia boleh membawa kepada tingkah laku yang tidak ditentukan jika penukaran tidak dimaksudkan. Jika boleh, adalah lebih baik untuk menggunakan static_cast untuk penukaran jenis yang boleh ditentukan pada masa penyusunan.
Atas ialah kandungan terperinci Bila hendak menggunakan `reinterpret_cast` lwn. `static_cast` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!