zah*_*pov 18 c c++ void-pointers
我试图理解C和C++之间关于void指针的区别.以下编译用C而不是C++编译(所有编译都用gcc/g ++ -ansi -pedantic -Wall完成):
int* p = malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)
因为malloc
返回void*
,C++不允许分配,int*
而C允许.
但是,这里:
void foo(void* vptr)
{
}
int main()
{
int* p = (int*) malloc(sizeof(int));
foo(p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++和C都编译它没有抱怨.为什么?
K&R2说:
任何指向对象的指针都可以转换为类型
void *
而不会丢失信息.如果结果转换回原始指针类型,则恢复原始指针.
这很好地总结void*
了C中的转换.C++标准规定了什么?
GMa*_*ckG 34
在C中,指向或来自的指针转换void*
总是隐含的.
在C++中,从转换T*
到void*
是隐含的,但void*
其他任何事情需要投.