static_cast:
1、用于显示转化,将较大的算术类型转换成较小的算术类型
2、用于从void*中将丢失的指针,转换出来
double d =3.14;
void * p= &d ; //任何非常量对象的指针都能转换成void *
double * ptr =static_cast<double *>(p);
const_cast
const_cast 只能改变运算对象的底层const(指针指向的对象是常量)。
const char * pc;//底层const
char * ptr = const_cast<char *>(pc);//正确,但是通过ptr写值是未定义的行为
reinterpret_cast
int * ip;
char *pc = (char *)ip;//c语言风格的强制类型转换
char *pc = reinterpret_cast<char *>ip;//reinterpret_cast通常为运算对象的位模式提供较低层次上的重新解释。
我们必须牢记pc所指向的真实对象是一个int而非字符。