gpt4 book ai didi

c++ - 何时以及如何决定是否使用 Actor 阵容?

转载 作者:搜寻专家 更新时间:2023-10-30 23:53:46 26 4
gpt4 key购买 nike

我正在浏览“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 可以在不显式转换的情况下完成。这绝对意味着转换是隐式处理的。然后,

  1. 为什么当我们尝试 pc = pb 指针时,强制转换是必要的?
  2. 指导这一点的规则是什么,在哪里?
  3. 是否与增量值递增/递减指针有关?

编辑

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com