Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menukar Penunjuk kepada Integer dengan Selamat untuk Keserasian 64-Bit?
Menukar Penunjuk kepada Integer untuk Keserasian 64-Bit
Pangkalan kod sedia ada, pada asalnya direka untuk mesin 32-bit, menggunakan fungsi dengan hujah void* yang kemudiannya ditukar kepada jenis yang sesuai dalam fungsi:
void function(MESSAGE_ID id, void* param) { if(id == FOO) { int real_param = (int)param; // ... } }
Apabila menyesuaikan kod ini kepada persekitaran 64-bit, pengkompil membenderakan ralat:
error: cast from 'void*' to 'int' loses precision
Untuk menangani perkara ini, pengubahsuaian diperlukan yang mengekalkan keserasian dengan 32 -mesin bit sebagai baiklah.
Penyelesaian
Untuk pendekatan C moden, reinterpret_cast
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
Jenis Integer Betul untuk Storan Penunjuk
Jenis data yang disyorkan untuk menyimpan penunjuk sebagai integer ialah uintptr_t atau intptr_t. Jenis ini berada dalam
Operator Casting yang Sesuai
Dalam C , reinterpret_cast ialah mekanisme casting pilihan untuk penukaran ini. Ia menggantikan operator cast gaya C, yang tidak lagi digemari dalam C .
Atas ialah kandungan terperinci Bagaimana untuk Menukar Penunjuk kepada Integer dengan Selamat untuk Keserasian 64-Bit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!