static_cast 转换
隐式类型转换
c
int x = 0;
long y = static_cast<long> (x);
reinterpret_cast 转换
显示类型转换
c
int* px = &x;
int p = reinterpret_cast<int>(px);
const_cast 转换
在有不同 cv 限定的类型间转换。通常用于 const 属性转非 const 属性
c
int a = 1;
//int* pa = (int*)&a;
int* pa = const_cast<int*>(&a);
(*pa)++;
cout << "a: " << a << endl;
cout<<"*pa: " << *pa;
dynamic_cast 转换
沿继承层级向上、向下及侧向,安全地转换到其他类的指针和引用。
父类类型的指针转换为子类类型的指针或引用时,可能会发生越界,如下图所示
dynamic_cast 强转时,父类要有虚函数
如果未能转换成功,返回空
c
class A
{
public :
virtual void f(){}
};
class B : public A
{};
void fun (A* pa)
{
// dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回
B* pb1 = static_cast<B*>(pa);
B* pb2 = dynamic_cast<B*>(pa);
cout<<"pb1:" <<pb1<< endl;
cout<<"pb2:" <<pb2<< endl;
}
int main ()
{
A a;
B b;
fun(&a);
fun(&b);
return 0;
}