【发布时间】:2014-12-04 07:45:02
【问题描述】:
考虑以下代码:
void **v_dptr(nullptr);
int **i_dptr = static_cast<int**>(v_dptr);
上面的例子产生如下编译错误:
static_cast from 'void **' to 'int **' is not allowed
我知道将void 指针转换为任何其他指针类型的正确方法是使用static_cast。但是,您不能 static_cast 一个双精度指针 void 指向另一个其他类型的双精度指针。
问:
- 为什么我们不能
static_cast一个双void指针? - 投射双
void指针的正确方法是什么?
【问题讨论】:
-
整数类型也会出现同样的问题。您可以
static_cast和int到long。您不能将static_cast和int *转换为long *,即使在int和long具有相同表示和对齐方式的实现上也是如此。你认为你应该能够在这些实现上做到这一点吗?如果没有,为什么不呢? -
void**最初是如何出现在您的代码中的? -
@AntonSavin Legacy C 代码,我也不喜欢它,但我必须处理它:(。
-
@40two 所以这个东西是由某个 C 函数返回的,还是传递给某个函数的参数?
-
@AntonSavin 实际上是“长老”尝试创建一个通用的指针数组。
标签: c++ pointers void-pointers