wskaźniki void: różnica między C i C ++

Próbuję zrozumieć różnice między C i C ++ w odniesieniu do wskaźników void. następujące kompilacje w C, ale nie w C ++ (wszystkie kompilacje wykonane za pomocą gcc / g ++ -ansi -pedantic -Wall):

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

Bomalloc zwracavoid*, którego C ++ nie pozwala przypisaćint* podczas gdy C na to pozwala.

Jednak tutaj:

void foo(void* vptr)
{
}

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

Zarówno C ++, jak i C kompilują go bez żadnych skarg. Czemu?

K i R2 mówią:

Dowolny wskaźnik do obiektu może zostać przekonwertowany na typvoid * bez utraty informacji. Jeśli wynik zostanie przekonwertowany z powrotem na oryginalny typ wskaźnika, oryginalny wskaźnik zostanie odzyskany.

I to jest całkiem niezłe sumienievoid* konwersje w C. Co dyktuje standard C ++?

questionAnswers(3)

yourAnswerToTheQuestion