reinterpret_cast用于任意类型的转换。

reinterpret_cast 允许将任意指针转换到其他指针类型,也允许任意整数类型和任意指针类型之间的转换。转换时,执行的是逐个比特复制的操作。

reinterpret_cast的用法:

1
reinpreter_cast<type-id> (exp)

其中 type-id 类型必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。

例如,Android 源码 android_hardware_SensorManager.cpp 的一个方法:

1
2
3
4
5
6
7
8
9
10
11
static jboolean
nativeGetSensorAtIndex(JNIEnv *env, jclass clazz, jlong sensorManager, jobject sensor, jint index)
{
    SensorManager* mgr = reinterpret_cast<SensorManager*>(sensorManager);
    Sensor const* const* sensorList;
    ssize_t count = mgr->getSensorList(&sensorList);
    if (ssize_t(index) >= count) {
        return false;
    }
    return translateNativeSensorToJavaSensor(env, sensor, *sensorList[index]) != NULL;
}

方法中将整数形的 jlong sensorManager 转换成了一个指针 SensorManager* mgr

总结:

  • reinterpret_cast 用于任意类型的转换,和其它强制转换一样,存在安全性;
  • 用法中 type-id 类型必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。