gpt4 book ai didi

c++ - 重复继承和static_cast

转载 作者:行者123 更新时间:2023-11-28 04:57:44 30 4
gpt4 key购买 nike

我有一个具有以下继承结构的类型橡皮擦:

                     Holder
/ | \
| | |
Holder_A_1 Holder_B_1 Holder_C_1
| | ...
Holder_A_2 Holder_B_2
... ...
| |
Holder_A_base Holder_B_base Holder_C_base
| | ...
Holder_A_base_2 Holder_B_base_2
... ...
| | |
Anchor Anchor Anchor

(故意重复 Anchor 基类。)

在构建对象时,我构建了一个 Holder 对象并将其转换为 Anchor* 以进行存储和删除。 Actor 是通过Holder_A_base*完成的用于消歧:static_cast<Holder_A_base*>(static_cast<Anchor*>(this))

我的问题是:static_cast 合法吗?来自 Anchor* (如上所述构造)到 Holder_B_base*如果我知道一个事实 Holder被删除的对象来自这两种类型?

最佳答案

如果您将问题改写为“static_castHolder_A_base_2 *Holder_B_base * 是否合法,您的问题就更容易理解了?”不,它不是,它不会编译。

Anchor *Holder_B_base * 的转换将编译但将是未定义的行为,除非指向的 Anchor 对象是其中的一部分Holder_B_base

如果您需要从任何 Anchor * 转换到它不属于的类,您可以使用 dynamic_cast。这允许交叉转换。

关于c++ - 重复继承和static_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796842/

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