void ponteiros: diferença entre C e C ++
Eu estou tentando entender as diferenças entre C e C ++ no que diz respeito a ponteiros vazios. o seguinte compila em C, mas não em C ++ (todas as compilações feitas com gcc / g + + -ansi -pedantic -Wall):
int* p = malloc(sizeof(int));
Porquemalloc
devolvevoid*
, que o C ++ não permite atribuir aint*
enquanto C permitir isso.
No entanto, aqui:
void foo(void* vptr)
{
}
int main()
{
int* p = (int*) malloc(sizeof(int));
foo(p);
return 0;
}
C ++ e C compilam sem reclamar. Por quê?
K & R2 dizem:
Qualquer ponteiro para um objeto pode ser convertido em tipovoid *
sem perda de informação. Se o resultado é convertido novamente para o tipo de ponteiro original, o ponteiro original é recuperado.
E isso resume tudo sobrevoid*
conversões em C. O que o padrão C ++ determina?