C语言当中的强制转换基本没有任何的限制,只需要一个括号即可,而在C++中,对强制转换有了一定的限制,这样避免了我们在使用时造成的不明确问题,同时也增加了代码的可读性。一共有四种,分别时static_cast、reinterpret_cast、const_cast、dynamic_cast。
1.static_cast转换
可以实现相同类型之间的转换,如:double b ;int a = static_cast<int>(b);
2.reinterpreter_cast 转换
可以实现不同类型之间的转换,如指针到整型
int* aas = new int[1] ;
aas[0] = 1;
int b = reinterpret_cast<int>(aas); ////b中的值为aas 指针的地址
3.const_cast 转换
const_cast 中的类型必须时指针、引用或指向对象成员类型的指针
const int constA = 10;
const int *pConstA = &constA;
int* b = const_cast<int*>(pConstA);
*b = *b + 1;
printf("%d ,%d",constA,*b);/////10 11 可以发现constA中的值并没有发生变化,因为constA是一个常量,若constA没有const的修饰,最后的结果将是11 11
4.dynamic_cast 转换
dynamic_cast实现的是多态类之间的的转换
对于“向上转换”(即派生类指针或引用类型转换为其基类类型),无论是指针还是引用向上转换都是安全地。
对于“向下转型”有两种情况:
一种是基类指针所指对象是派生类类型的,这种转换是安全的;
另一种是基类指针所指对象为基类类型,在这种情况下dynamic_cast在运行时做检查,转换失败,返回结果为0;
https://blog.csdn.net/u010275850/article/details/49452373 我觉得这篇博客对于dynamic_cast的转换好理解