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