void WorkHorse(void* ptr, int tag) {
if (SomeFunction(tag)) {
Foo* foo_ptr = (Foo*)ptr;
// do stuff
} else {
Bar* bar_ptr = (Bar*)ptr;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这通常是一个糟糕的设计,但很好奇它是否在技术上是 UB。
将 void* param 转换为各种类型是 UB 吗?
不,转换void*为指向对象类型的指针不是 UB。如果是的话,那void*基本上就没什么用了。
但是,在某些情况下,通过转换后的指针进行间接访问可能是 UB;通常当地址不包含适当类型的对象时。
正如您所指出的,void*像这样使用通常是糟糕的设计,并且仅在与某些 C API 交互时才需要。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |