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 ++?