通过空隙向下铸造/向上铸造*

Downcasting/upcasting via void*

本文关键字:      更新时间:2023-10-16

我有一个涉及虚函数、多重继承但不是虚拟继承的类层次结构。整个层次结构根于基类B。类最多出现在层次结构中。

现在,我正在使用一个库,我只能传递和接收回void*(基本上是一些"句柄"(。

在什么情况下,在我的层次结构和void*实例之间转换是安全/合法/定义的?

我是否应该在通过void*之前总是向上投B*,反之亦然?

如果dD*的实例并且DB的子类,(D*) (B*) (void*) (B*) d会等于d吗?

您必须从void*转换为与void*相同的类型。这保证是安全的。void*的其他演员阵容导致 UB。

拥有非 void 指针后,将应用类层次结构指针的正常强制转换规则。

以你为例,

(D*) (B*) (void*) (B*) d

没关系,但是

(D*) (void*) (B*) d
(B*) (void*) d

不是。

相关文章:
  • 没有找到相关文章