众所周知,C++中父类子类的互转可以使用 dynamic_cast 进行类型转换,但是可能会丢失一些数据
如果是容器里面的父类,子类互转的话,就要用到 reinterpret_cast 进行转换,同样的也会丢失一些数据
先随便声明 3 个类
class A { public: int a = 1; }; class B : A { public: int b = 2; }; class C : B { public: int c = 2; };
主函数如果这么写的话,就是由父类 A 转为子类 B。
int main() { list<A> c_a; list<B> c_b; list<C> c_c; for (int i = 0; i < 2; ++i) { c_a.push_back(A()); } c_b = *reinterpret_cast <list<B> *> (&c_a); return 0; }
这代码执行之后变量 c_a, c_b 的内容如图所示
可以看到,存储b的 c_b 容器中,b的值是0,而a的值依旧是1。
子类 C 转 子类 B
int main() { list<A> c_a; list<B> c_b; list<C> c_c; for (int i = 0; i < 2; ++i) { c_c.push_back(C()); } c_b = *reinterpret_cast <list<B> *> (&c_c); return 0; }
执行之后的局部变量如图
丢失了 B 中不存在的变量c,其他一致
更高级的用法详见 cppreference 的 reinterpret_cast 条目.
那个Google 密码泄露包您还有吗?发个百度云链接好吗?
请问你的用途是?