我正在浏览“Multiple Inheritance for C++ by Bjarne Stroustrup, Published in the May 1999 issue of "The C/C++ Users Journal"”。以下摘录自同一页(第 5/17 页),
4.4 Casting
Explicit and implicit casting may also involve modifying a pointer value with a delta:
class A { void f(); }; class B { int f(); }; class C : A, B { }; C* pc; B* pb; pb = (B*)pc; // pb = (B*)((char*)pc+delta(B)) pb = pc; // pb = (B*)((char*)pc+delta(B)) pc = pb; // error: cast needed <-------------------- HERE pc = (C*)pb; // pc = (C*)((char*)pb-delta(B))
他向我们展示了 pb = pc
可以在不显式转换的情况下完成。这绝对意味着转换是隐式处理的。然后,
- 为什么当我们尝试
pc = pb
指针时,强制转换是必要的? - 指导这一点的规则是什么,在哪里?
- 是否与增量值递增/递减指针有关?
编辑
Jonathan Mee将此问题标记为“What Type of Cast to Go from Parent to Child?”的拷贝。恐怕,我不同意。我的问题是,为什么要强制转换,这条指导我们强制转换或不强制转换的规则在哪里。我认为背后的逻辑可能相同,但概念完全不同。在他的问题中,他怀疑(坚持不使用动态转换)使用dynamic_cast和static_cast。我的怀疑比他的怀疑还要晚一些。
最佳答案
它与我们知道对象具有的类型有关。每个 C
也是一个 B
,因此转换始终有效(隐式)。
每个 B
都不是 C
的一部分,因此您必须告诉编译器您确定该特定转换会起作用。这就是显式转换的使用。
关于c++ - 何时以及如何决定是否使用 Actor 阵容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38351375/