我们有dynamic_cast的一般形式:
dynamic_cast
我特别对这条规则(5a)的粗体部分感到困惑:
5:如果expression是指向多态类型基的指针或引用,而new-type是指向派生类型的指针或引用,则执行运行时检查:
a)检查由表达式指向/标识的最派生对象。如果在该对象中,表达式指向/引用派生的公共基,并且如果仅有一个派生类型的对象从由表达式指向/标识的子对象派生,则转换的结果指向/引用该派生对象。(这称为“向下转换”。)
你能给出一个这个部分不满意的例子吗?
以上摘录来自CPPreference:https://en.cppreference.com/w/cpp/language/dynamic_cast
丰富了多重继承的例子@Peter总结道:
Base1
|
Base2
/ \
Left Right
\ /
Derived
Base1* p_base1 = new Derived();
Base2* p_base2 = dynamic_cast<Base2*>(p_base1); // Which Base2?
在派生的
对象中有两个不同的base2
对象,那么p_base2
应该指向哪一个?