Estoy tratando de entender las diferencias entre C y C++ con respecto a punteros void. las siguientes compila en C, pero no C++ (todas las compilaciones de hecho con gcc/g ++ -ansi -pedantic -Wall):punteros void: diferencia entre C y C++
int* p = malloc(sizeof(int));
porque malloc
rendimientos void*
, que C++ no permite asignar a int*
mientras que C no permite ese.
Sin embargo, aquí:
void foo(void* vptr)
{
}
int main()
{
int* p = (int*) malloc(sizeof(int));
foo(p);
return 0;
}
Tanto C++ y C compilarlo con ninguna queja. ¿Por qué?
K & R2 decir:
Cualquier puntero a un objeto puede ser convertir al tipo
void *
sin pérdida de información. Si el resultado es convierte de nuevo a la original tipo de puntero, el puntero original es recuperado.
Y esta bonita suma todo lo que hay acerca de void*
conversiones en C. ¿Qué es lo que dicta el estándar C++?
GMan explica correctamente por qué recibe el error. Dicho esto, si está escribiendo código C++, debe usar nuevo/nuevo [] y eliminar/eliminar [] en lugar de malloc/calloc y libre/libre. –