J'essaie de comprendre les différences entre C et C++ en ce qui concerne les pointeurs de vide. les compiles suivants en C mais pas C++ (toutes les compilations faites avec -ansi -pedantic -Wall gcc/g ++):pointeurs de vide: différence entre C et C++
int* p = malloc(sizeof(int));
Because malloc
retours void*
, C++ qui ne permet pas d'attribuer à int*
en C ne permet cette.
Cependant, ici:
void foo(void* vptr)
{
}
int main()
{
int* p = (int*) malloc(sizeof(int));
foo(p);
return 0;
}
Les deux C++ et C Compile avec ne se plaint. Pourquoi?
K & R2 dire:
Tout pointeur sur un objet peut être convertie en type
void *
sans perte d'information. Si le résultat est reconverti au type de pointeur d'origine , le pointeur d'origine est récupéré.
Et ce résume assez tout ce qu'il ya environ void*
conversions en C++ C Qu'est-ce diktat norme?
GMan explique correctement pourquoi vous obtenez l'erreur. Cela dit, si vous écrivez du code C++, vous devriez utiliser new/new [] et delete/delete [] au lieu de malloc/calloc et free/free. –