Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menukar Penunjuk kepada Integer dengan Selamat pada Mesin 64-Bit?
Menukar Penunjuk kepada Integer: Dilawati Semula untuk Mesin 64-Bit
Dalam C/C , kemungkinan perangkap apabila berurusan dengan 64- mesin bit timbul apabila mengendalikan penunjuk. Teknik penukaran tradisional, seperti yang ditunjukkan di bawah, boleh mengakibatkan ralat ketepatan:
void function(MESSAGE_ID id, void* param) { if (id == FOO) { int real_param = (int)param; // ... } }
Penyelesaian dengan Teknik Casting yang Dikemas kini
Untuk membetulkan isu ini dan memastikan kelancaran keserasian pada kedua-dua sistem 32-bit dan 64-bit, pendekatan C moden adalah disyorkan:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
Memilih Jenis Data yang Betul
Apabila menyimpan penunjuk sebagai integer, adalah penting untuk memilih jenis data yang sesuai. Untuk tujuan ini, jenis uintptr_t adalah paling sesuai.
// C++11 std::uintptr_t i; // C++03 extern "C" { #include <stdint.h> } uintptr_t i; // C99 #include <stdint.h> uintptr_t i;
Menggunakan Operator Casting Betul
Dalam C , pelbagai jenis tuangan wujud. Untuk senario khusus ini, reinterpret_cast ialah pilihan yang paling sesuai.
// C++11 auto i = reinterpret_cast<std::uintptr_t>(p); // C++03 uintptr_t i = reinterpret_cast<uintptr_t>(p); // C uintptr_t i = (uintptr_t)p;
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Penunjuk kepada Integer dengan Selamat pada Mesin 64-Bit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!