C++不同指针直接互相转换用static cast还是reinterpret cast?

查看:91
本文介绍了C++不同指针直接互相转换用static cast还是reinterpret cast?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题, 不同类型的指针应该算是相同的吗?
因为本质上都是地址, 那么按理来说应该是static cast, 但是由于指针类型不同好像又是应该用reinterpret cast,所以这种情况下该用哪种类型转换呢?

解决方案

慎用reinterpret_cast,因为这货发明出来的目的就是用来忽悠编译器的,他的转换仅仅是更改了解释方式,而对实际数据没有任何更改,如果t的类型是TYPE,那么x=reinterpret_cast<>(t)相当于*((TYPE*)(&x))=t,如果你用reinterpret_cast去把一个int转换到float,那它只是把二进制数据完完整整拷贝了一遍,得到的结果并没有什么意义……当然退一步讲,用reinterpret_cast当然可以实现你想要的指针转换

static_cast会检查类型,所以可以用于内置类型的转换(比如从int到float就能按照语义进行转换),但如果是对于指针,必须是同一棵继承树上的类型才能互相转换,并且只有上行转换(从子类到基类)才是保证安全的。

既然你的char*和目标指针并没有啥继承关系,那么显然只能用reinterpret_cast或者C风格强转

话说题主最近在和内存池较劲哈……

这篇关于C++不同指针直接互相转换用static cast还是reinterpret cast?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆