我正在查看一段代码,其中有一个令我困惑的 c 风格演员表。
我对选角相当熟悉,但这个我真的无法掌握。所以,这里是:我有两个类,比如 Base 和 Derived,但 Derived 没有添加任何方法/属性。基本上,当 Base 的一个属性(称为 M_blockSize)固定为 1 时,这只是 Base 的一种特殊情况;然而,这些方法都不需要特定的实现,也不需要扩展功能。这种派生类的好处不是这个线程的重点。让我们假设开发人员对此有充分的理由。
无论如何,在这段代码中,我正在寻找这样的事情:
void foo(const Derived& d){...}
[...]
Base b;
foo((Derived&) b);
因此,开发人员将基础对象转换为对派生对象的引用。据我了解,如果“种姓”(b)的具体类型确实是派生的,则进行向下转换。这不是这里的情况。
然而,这是 c 风格的转换,所以编译器正在尝试一大堆转换,我不知道它最终会起作用。
所以,问题:
- 1)编译器在做什么转换?我假设一个 reinterpret_cast 也许?
- 2) static_cast< Derived& >(b) 也可以吗?
- 3)如果派生类添加了一些方法/属性(未在 foo 中使用),这仍然有效吗?
- 4) 关键点是 foo 不使用 Derived 的任何尚未在 Base 中的功能吗?
我希望这个问题很清楚。感谢您的帮助。