Leerzeiger: Unterschied zwischen C und C ++

Ich versuche, die Unterschiede zwischen C und C ++ in Bezug auf leere Zeiger zu verstehen. Die folgenden Kompilierungen in C, aber nicht in C ++ (alle Kompilierungen erfolgen mit gcc / g ++ -ansi -pedantic -Wall):

int* p = malloc(sizeof(int));

weilmalloc kehrt zurückvoid*, denen C ++ nicht zuordnen darfint* während C das erlaubt.

Hier jedoch:

void foo(void* vptr)
{
}

int main()
{
    int* p = (int*) malloc(sizeof(int));
    foo(p);
    return 0;
}

Sowohl C ++ als auch C kompilieren es ohne Beschwerden. Warum?

K & R2 sagen:

Jeder Zeiger auf ein Objekt kann in Typ konvertiert werdenvoid * ohne Informationsverlust. Wenn das Ergebnis wieder in den ursprünglichen Zeigertyp konvertiert wird, wird der ursprüngliche Zeiger wiederhergestellt.

Und das sind alles hübsche Summenvoid* Konvertierungen in C. Was schreibt der C ++ - Standard vor?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage