c – 如何使用dynamic_cast运算符识别失败的转换?

Scott Meyer在他的书Effective C中表示,dynamic_cast用于执行安全转换或跨继承层次结构.也就是说,您可以使用dynamic_cast将基类对象的指针或引用转换为指针或对派生或同级基类对象的引用,以确定转换是否成功.

失败的转换由空指针(当转换指针时)或异常(转换引用时)指示.

我想获得两个代码片段,显示失败的投射在投射指针和投射的情况下可以指示参考.

解决方法

对于指针,这是一个简单的空检:
A* a = new A();
B* b = dynamic_cast<B*>(a);

if (b == NULL)
{
    // Cast Failed
}

对于参考,你可以抓住:

try {
    SomeType &item = dynamic_cast<SomeType&>(obj);
}
catch(const std::bad_cast& e) {
    // Cast Failed
}

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...