关于C++中的reinterpret_cast
功能:
1.指针和整数之间的转换
2.不同类型的指针/成员指针/引用之间的转换。
reinterpret_cast是四种强制转换中最为强大的,它可以暴力完成两个完全无关类型的指针之间或指针和数之间的转换。比如用char类型指针指向double值,例子:
double a = 12.1;
char* b = reinterpret_cast<char*>(&a);//将a以二进制(位模式)方式解释为char,并赋给b;
double* c = reinterpret_cast<double*>(b);
std::cout << *c;//12.1
reinterpret_cats对原始对象的位模式提供较低层次上的重新解释(即reinterpret),完全复制二进制比特位到目标对象,转换后的值与原始对象无关但比特位一致,前后无精度损失。
由于转换后没有精度损失,所以把一个指针转换成整数,再把该整数转换为原类型的指针,仍可得到原指针的值。
比如开辟了系统全局的内存空间,需要在多个应用程序之间传递这个空间的指针时,就可以将指针转换成整数值,得到以后再将值转换成指针进行对应的操作。但它本质上是一个编译期指令,实际动作可能取决于编译器,虽然功能最强但封建最大,且失去了移植性。