我正在尝试理解C和C++在void指针方面的差异。以下代码在C中可以编译通过,但在C++中无法编译通过(使用gcc / g ++-ansi-pedantic-Wall进行所有编译):
int* p = malloc(sizeof(int));
因为malloc
返回void*
,而C++不允许将其分配给int*
,而C则允许。
然而,在这里:
void foo(void* vptr)
{
}
int main()
{
int* p = (int*) malloc(sizeof(int));
foo(p);
return 0;
}
为什么C++和C编译时都没有任何投诉?
K&R2说:
任何指向对象的指针都可以转换为类型为
void *
的指针,不会丢失信息。如果将结果转换回原始指针类型,则可以恢复原始指针。
这就几乎涵盖了C中所有关于void*
转换的内容。那么C++标准规定了什么?