1、static_cast :用于两个相关类型间的转换。
double dData = 3.1415926;
int iData = 0;
iData = static_cast<int>(dData);
2、const_cast : 用于转换掉const。
1、将常量指针转换为非常量指针赋值
const int *pInt = new int;
int *iData = const_cast<int*>(pInt); //iData指向pInt指向的内存
*iData = 9;
2、将常量引用转换为非常量引用赋值
int iData;
const int &pInt = iData;
int &iNumber = const_cast<int&>(pInt);
iNumber = 9;
注意:const_cast<必须是指针或引用>()。
3、dynamic_cast : 主要用于类与其派生类之间的上行转换和下行转换。在上行转换时,dynamic_cast和static_cast的效果等同。但在下行转换时,dynamic_cast会有检查功能,检查两个类之间是否是派生关系。
class A
{
virtual void Func() {}
};
class B : public A
{
};
int main()
{
//上行转换 父类指针指向子类对象
A *b = new B();
B *P1 = static_cast<B*>(b); //有值
B *P2 = dynamic_cast<B*>(b); //有值
//下行转换
A *a = new A();
B *P3 = static_cast<B*>(a); //有值,虽然转换成功,但转换结果可能有问题
B *P4 = dynamic_cast<B*>(a); //P4 == NULL;
system("pause");
}
注意:尽量不要使用dynamic_cast类型转换
4、renterpret_cast : 用在任意类型的指针或引用之间的转换。(待研究)