我试图了解 C 和 C++ 在 void 指针方面的区别。以下在 C 中编译,但不是在 C++ 中编译(所有编译都使用 gcc/g++ -ansi -pedantic -Wall 完成):
int* p = malloc(sizeof(int));
因为malloc
return 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 *
而不会丢失信息。如果将结果转换回原始指针类型,则恢复原始指针。
这很好地总结了void*
C 中的所有转换。C++ 标准规定了什么?