通过 void 向下转型/向上转型*

use*_*643 1 c++ casting

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

现在,我正在使用一个图书馆,我只能在那里传递和接收 void*(基本上是一些“句柄”)。

在什么情况下在我的层次结构实例和 void*?

我应该B*在过去之前总是向上看吗void*吗,反之亦然?

(D*) (B*) (void*) (B*) d等于difd是 的实例D*D的子类B

n. *_* m. 5

您必须void*转换为与您void*开始转换的完全相同的类型。这保证是安全的。从void*铅到 UB 的其他演员。

一旦你有一个非空指针,类层次结构的指针的正常转换规则就适用。

使用你的例子,

(D*) (B*) (void*) (B*) d
Run Code Online (Sandbox Code Playgroud)

可以,但是

(D*) (void*) (B*) d
(B*) (void*) d
Run Code Online (Sandbox Code Playgroud)

不是。