【问题标题】:How does dynamic_cast fail?dynamic_cast 如何失败?
【发布时间】:2011-08-30 02:24:32
【问题描述】:

根据我的阅读,执行错误的运行时 dynamic_cast 可能会抛出 bad_cast 异常或返回零。

如果你正在转换指针,它会返回零是否正确?

即:

class Base { virtual void a(){} };
class Derived: public Base {};

int main () {
  Base *base = new Base();
  dynamic_cast<Derived*>(base);
  return 0;
} 

而且它在转换对象时会抛出一个 bad_cast 异常?

即:

class Base { virtual void a(){} };
class Derived: public Base {};

int main () {
  Base base;
  Base& ref = base;
  dynamic_cast<Derived&>(ref);
  return 0;
}

【问题讨论】:

    标签: c++ casting dynamic-cast


    【解决方案1】:

    dynamic_cast 如果您正在转换指针,则会在错误转换时返回 NULL;投射 references 时会抛出 std::bad_cast。尝试使用dynamic_cast(例如,使用dynamic_cast&lt;Derived&gt;(base))强制转换对象是编译时错误

    【讨论】:

    • 好的,所以确认是正确的。谢谢。我编辑了消息以使基类具有多态性(添加虚函数)并使用引用强制转换来抛出异常。
    猜你喜欢
    • 1970-01-01
    • 2015-06-10
    • 2011-07-04
    • 2018-11-26
    • 2017-01-11
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多