【发布时间】:2010-12-16 17:57:36
【问题描述】:
我试图了解 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++ 标准规定了什么?
【问题讨论】:
-
GMan 正确解释了您收到错误的原因。也就是说,如果你正在编写 C++ 代码,你应该使用 new/new[] 和 delete/delete[] 而不是 malloc/calloc 和 free/free。
标签: c++ c void-pointers