Why does dynamic_cast exist?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Regular cast vs. static_cast vs. dynamic_cast
号
我通过这个问题了解了静态演员表是如何工作的。为什么在这里使用静态u cast而不是重新解释u cast很重要?
但是,如果静态类型转换确实知道类的继承关系,那么为什么存在动态类型转换?我们什么时候必须使用动态铸造?
我将发布一个简单的例子,说明它们的区别:
1 2 3 4 5 6 7 8 9 | struct foo { virtual void fun() {} }; struct bar : foo {}; struct qux : foo {}; foo* x = new qux; bar* y = static_cast<bar*>(x); bar* z = dynamic_cast<bar*>(x); std::cout << y; // prints address of casted x std::cout << z; // prints null as the cast is invalid |
如果我理解正确,
如果类型是指针,则
此外,在某些情况下,
1 2 3 4 5 6 7 8 | class Base {}; class Foo : public Base { ... }; class Bar : public Base { ... }; class FooBar: public virtual Foo, public virtual Bar { ... }; FooBar a; Foo & foo1 = static_cast<Foo &>(a); // Illegal, wont compile Foo & foo2 = dynamic_cast<Foo &>(a); // Legal |
号