reinterpret_cast的含义和特性

reinterpret_cast含义: 直接以另外一种格式来解释当前内存, 能够在任意指针(或引用)类型之间的转换

举例

我们使用reinterpret_castconst 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;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值