关于reinterpreter_cast类型转换的思考

reinterpret_cast可以将任何指针类型转换为任何其他指针类型,甚至是不相关的类。 操作结果是从一个指针到另一个指针的值的简单二进制副本。 允许所有指针转换:既不检查指向的内容,也不检查指针类型本身。

它还可以从整数类型转换指针。这个整型值表示指针的格式是特定于平台的。唯一的保证是,一个指针被投射到一个足够大的整数类型,保证能够将其转换回一个有效的指针。

所谓“通常为操作数的位模式提供较低层的重新解释”也就是说将数据以二进制存在形式的重新解释。
这句话什么意思呢,就是说reinterpret_cast能将sizeof(void*)在32位系统上4字节,64位系统上8字节,总之将这么大小的的内存数据重新解释:
比如如下:

int i;

char *p = "This is an example.";

i = reinterpret_cast<int>(p);


 long long int f;
    char *p="sssss";
    f=reinterpret_cast<long long int>(p);

注意:只能继续int之间的转换,换成double就不行
另外就是指针各种转换。

static_cast 可以转换各种基础数据类型,转换的时候是通过二进制的转化,以及有继承关系的类之间的转换,它就不能进行如下转化:

 long long int *f;
    char *p="sssss";
    f=static_cast<long long int*>(p);

dynamic_cast
更加严格,只能进行子类与父类,且父类有虚函数之间的指针或者引用之间的转换。并且开销更大,因为进行动态检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值