Scott Meyer在他的书Effective C++中说,dynamic_cast用于向下或跨继承层次结构执行安全强制转换。也就是说,您可以使用dynamic_cast将指向基类对象的指针或引用强制转换为指向派生或同级基类对象的指针或引用,以便您可以确定强制转换是否成功。失败的强制转换由空指针(当强制转换指针时)或异常(当强制转换引用时)指示。
我想得到两个代码片段,显示在转换指针和转换引用可以指示的情况下失败的转换。
我在源代码中使用了dynamic_cast来转换指针,如下所示。Base *base = here storing the pointer;
如果base没有类层次结构的指针,则强制转换失败并返回NULL。我遇到了一个崩溃转储,我的应用程序由于dynamic_cast抛出异常而崩溃。
我知道dynamic_cast只有在与引用类型一起使用时才会抛出异常。你知道当我在上面的源码中使用指针时,<em
如果没有检查NULL的返回值,那么使用dynamic_cast有什么意义吗?如果我正在查看一个代码库,并且在返回值中省略了对它的null检查,那么使用static_cast是否更好foo(*a); //mightas well have used a static_cast
我已经阅读了谷歌在这个问题上提供的所有信息,似乎检查空值是唯一的原因,但我还没有看到任何人站出来说“没有空值检查的dynamic_cast编辑:有人告诉我,如果类型之间存在虚
如果我们组合对dynamic_cast的调用并回到指针值上的原始类型,那么C++是否保证保留该值,前提是没有dynamic_cast失败,即不返回一个nullptr?virtual public A {};{ C* c = dynamic_cast= nullptr) B* bp = dynamic_cast<B*>(c);