reinterpret_cast
含义: 直接以另外一种格式来解释当前内存, 能够在任意指针(或引用)类型之间的转换
举例
我们使用reinterpret_cast
将const unsigned char*
转为const char*
PyObject* get_data(const unsigned char* data, int size){
PyObject* str = PyBytes_FromStringAndSize(reinterpret_cast<const char*>(data), size);
return str;
}
特性
不能去掉const
int main() {
typedef void (*FP)(char *);
FP fp = [](char *x) -> void{
cout << x << endl;
};
const char* a = "hello world";
// fp(reinterpret_cast<char*>(a));
// C++ reinterpret_cast 无法丢掉常量或其他类型限定符
fp(const_cast<char*> (a));
return 0;
}
任意指针(引用)之间转换
这里可能比较迷惑, 为什么const int*
能转化为void (FP*) (char*)
的函数指针, 不是说不能去掉const嘛, 因为const在指针之前, 意义是所指内容不变, 函数指针默认含义肯定是所指内容不变(函数还能改变么)
int main() {
typedef void (*FP)(char *);
int v = 12;
const int* vs = &v;
FP fp = reinterpret_cast<FP>(v);
return 0;
}