stl中的类型转换

static_cast     dynamic_cast      const_cast     reinterpret_cast

1、static_cast

 可以把static_cast看做一个强制转换的操作。没有什么好说的。

2、dynamic_cast

类的继承关系图:【A为基类】

void f(D* pd)
{
   E* pe = dynamic_cast<E*>(pd); // 由D-->E的转换
  B* pb = pe; // 向上转换,隐式转换
A* pa = pb; // 向上转换,隐式转换


} 还存在一种交叉转换,如 D --->B 的转换。。。,这在static_cast是不可能执行的转换的。
如下面的代码:
View Code
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class B
 5 {
 6 /*public:
 7     virtual void fun ()
 8     {}*/
 9 };
10 
11 class C
12 {
13 public:
14     virtual void fun ()
15     {}
16 };
17 
18 class D : public B, public C 
19 {
20 
21 };
22 
23 void  main()
24 {
25     B *pb = new B;
26     C *pc = new C;
27     
28 /*    B *pb2 = static_cast<B*>(pc);   // 会报错...
29     if(pb2 == NULL)
30     {
31         cout << "转换错误" << endl;
32     }
33 */
34     B *pb3 = dynamic_cast<B*>(pc);
35     if(pb3 == NULL)
36     {
37         cout << "转换错误" << endl;
38     }
39 }
注:dynamic_cast还存在一个动态检测的功能,如果没有正确转换,dynamic_cast返回的是NULL。

原文地址:https://www.cnblogs.com/xuxu8511/p/2438544.html