1、static_cast
1.上行转换,把派生类的指针或引用转换成基类,此时是安全的
2.下行转换,把基类的指针或者引用转换成派生类,因为没有动态监测,所以是不安全的
3.显示类型转换,如Int转float等
4.任意类型空指针转任意类型空指针
5.任意类型表达式转为void类型
代码如下:
int a = 4;
float f = static_cast <float>(a);
void *pa = &a;
int *pb = static_cast <int*>(pa);
class Base
{
virtual void A()
{
cout << "a" << endl;
}
};
class B :public Base
{
void A()
{
cout << "b" << endl;
}
};
Base *base = new Base;
B *b = static_cast<B*>(base);
2、const_cast
1.常量指针被转成非常量指针并指向原对象。
2.常量引用被转成非常量引用并指向原对象。
const B *b1;
B* b2 = const_cast<B*>(b1);
3、dynamic_cast
下行转下行的时候会检测,比static_cast安全。不成功返回NULL。
4、reinterpret_cast
它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,
在把该整数转换成原类型的指针,还可以得到原先的指针值)。
该运算符的用法比较多。