static_cast
static_cast功能上基本与c的类型转换一致。但是它不能像c把struct转换为int类型;另外不能去除表达式的常量。
cout<<"static_cast:"<<endl;
int i=12,j=5;
double res = static_cast<double>(i)/j;
cout<<"res = "<<res<<endl;
float f = 2.3;
void* pf = &f;
float * ff = static_cast<float*>(pf);
cout<<"*ff = "<<*ff<<endl;
const_cast
const_cast只能用于消除表达式的常量性,如果想用它来转换其他的东西,将会出错。
int cd = 11;
const int * pcd = &cd;
// int *pd = static_cast<int*>(pcd);//error
int* pd = const_cast<int*>(pcd);
cout<<"*pd = "<<*pd<<endl;
dynamic_cast
dynamic_cast被用于安全地沿着类的继承关系向下进行类型转换,失败的话返回空指针或抛出异常。当然常量性同样无法被消除。
reinterpret_cast
执行期语义,最常用的用途是在函数指针类型之间进行转换。但是要小心使用