通过空隙向下铸造/向上铸造*
Downcasting/upcasting via void*
我有一个涉及虚函数、多重继承但不是虚拟继承的类层次结构。整个层次结构根于基类B
。类最多出现在层次结构中。
现在,我正在使用一个库,我只能传递和接收回void*
(基本上是一些"句柄"(。
在什么情况下,在我的层次结构和void*
实例之间转换是安全/合法/定义的?
我是否应该在通过void*
之前总是向上投B*
,反之亦然?
如果d
是D*
的实例并且D
B
的子类,(D*) (B*) (void*) (B*) d
会等于d
吗?
您必须从void*
转换为与void*
相同的类型。这保证是安全的。void*
的其他演员阵容导致 UB。
拥有非 void 指针后,将应用类层次结构指针的正常强制转换规则。
以你为例,
(D*) (B*) (void*) (B*) d
没关系,但是
(D*) (void*) (B*) d
(B*) (void*) d
不是。
相关文章:
- 没有找到相关文章