reinterpret_cast:
将一个指针类型转换为另一个指针类型(不改变指针变量的值)。不能用于非指针类型的转换。
double d = 12.3 ;
double *pd = &d ;
int *pi = reinterpret_cast<int *>(pd) ;
const_cast:
去除指针的常量属性,或者为非常量指针增加常量属性。
double d = 123.4 ;
const double *pcd = &d ;
double *pd = const_cast<double*>(pcd) ;
pcd = const_cast<const double*>(pd) ;
static_cast:
主要用于基本类型和具有继承关系之间的类型转换。
double d = 123.4 ;
int i = static_cast<int>(d) ;
dynamic_cast:
这种转换与上面几种转换的区别在于,它是在运行时而不是编译时进行的。
只能在有继承关系的指针或引用间使用。转换失败时返回NULL,并抛出bad_cast异常 。
class Base{};
class Derive : public Base {};
int main()
{
Derive *pd = new Derive() ;
Base *pb = dynamic_cast<Base*>(pd) ;
if (!pb)
{
cout << "转换失败" ;
}
else
{
cout << "转换成功" ;
}
return 0 ;
}