从 Foo** 到 void** 的无效转换 - 为什么允许隐式类型转换为 void* 但不允许为 void**?
Invalid conversion from Foo** to void** - why is implicit type conversion allowed to void* but not to void**?
struct Foo {};
...
void * p = (Foo*)0; // OK
void ** pp = (Foo**)0; // Invalid conversion
据我所知,在 C++ 中,指向任何非指针类型的指针都可以隐式转换为 void*
。为什么不允许将指针类型转换为 void**
?
指针可以隐式转换为 void *
,因为 void *
是通用指针。但是,void **
不是指向指针的通用指针。
C FAQ 4.9 解释了为什么 C 中没有指向指针类型的通用指针,我认为它也适用于 C++。
struct Foo {};
...
void * p = (Foo*)0; // OK
void ** pp = (Foo**)0; // Invalid conversion
据我所知,在 C++ 中,指向任何非指针类型的指针都可以隐式转换为 void*
。为什么不允许将指针类型转换为 void**
?
指针可以隐式转换为 void *
,因为 void *
是通用指针。但是,void **
不是指向指针的通用指针。
C FAQ 4.9 解释了为什么 C 中没有指向指针类型的通用指针,我认为它也适用于 C++。