【发布时间】:2015-03-12 09:29:54
【问题描述】:
struct Foo {};
...
void * p = (Foo*)0; // OK
void ** pp = (Foo**)0; // Invalid conversion
据我所知,在 C++ 中,指向任何非指针类型的指针都可以隐式转换为 void*。那么为什么不允许将指针类型转换为void**?
【问题讨论】:
标签: c++ gcc type-conversion
struct Foo {};
...
void * p = (Foo*)0; // OK
void ** pp = (Foo**)0; // Invalid conversion
据我所知,在 C++ 中,指向任何非指针类型的指针都可以隐式转换为 void*。那么为什么不允许将指针类型转换为void**?
【问题讨论】:
标签: c++ gcc type-conversion
指针可以隐式转换为void *,因为void * 是通用指针。但是,void ** 不是指向指针的通用指针。
C FAQ 4.9 解释了为什么 C 中没有指向指针类型的通用指针,我认为它也适用于 C++。
【讨论】:
(void**)&(Foo*) 无效的架构,但标准禁止这样做的事实是值得考虑的。