提问者:小点点

动态铸造规范(规则)澄清


我们有dynamic_cast的一般形式:

dynamic_cast(表达式)

我特别对这条规则(5a)的粗体部分感到困惑:

5:如果expression是指向多态类型基的指针或引用,而new-type是指向派生类型的指针或引用,则执行运行时检查:

a)检查由表达式指向/标识的最派生对象。如果在该对象中,表达式指向/引用派生的公共基,并且如果仅有一个派生类型的对象从由表达式指向/标识的子对象派生,则转换的结果指向/引用该派生对象。(这称为“向下转换”。)

你能给出一个这个部分不满意的例子吗?

以上摘录来自CPPreference:https://en.cppreference.com/w/cpp/language/dynamic_cast


共1个答案

匿名用户

丰富了多重继承的例子@Peter总结道:

     Base1
       |
     Base2
    /     \
  Left   Right
    \     /
    Derived

Base1* p_base1 = new Derived();
Base2* p_base2 = dynamic_cast<Base2*>(p_base1); // Which Base2?

派生的对象中有两个不同的base2对象,那么p_base2应该指向哪一个?