c – 什么时候/应该使用dynamic_cast而不是static_cast?

我想知道什么时候必须或者应该在static_cast上使用dynamic_cast,并举例说明.我读过
this SO question,但它并没有提供任何具体的例子.我假设大多数示例都涉及多态类类型.目前我知道使用dynamic_cast而不是static_cast的唯一原因是,如果我不能100%确定我正在使用的具体类型.

其他一些想法:

>横向投射(多重继承)
>转换为虚拟继承层次结构中的基类
>在使用多重继承的类中转换为“最正确”的继承类型时,指针是否会更改(如果使用static_cast)?

是“如果型号未知”的原因唯一的原因是什么?如果没有,有人可以举例说明为什么dynamic_cast必须或应该在static_cast上使用?

最佳答案 通常,在a中转换时应使用dynamic_cast

等级,无论如何.一个可能的例外是从a转换

派生类到基类(当然是指针或引用).除此以外,

关于你在层次结构中使用static_cast的唯一时间是

分析师说你必须.

转换为void *时更经常使用static_cast,
或者确保空指针常量的正确类型,或者用于
转换不涉及指针或引用(例如
static_cast< double>(someInt)).

点赞