In C muss a nicht in einen void *
anderen Zeigertyp umgewandelt werden, es wird immer sicher heraufgestuft. In C ++ ist dies jedoch nicht der Fall. Z.B,
int *a = malloc(sizeof(int));
funktioniert in C, aber nicht in C ++. (Hinweis: Ich weiß, dass Sie nicht malloc
in C ++ oder für diese Angelegenheit verwenden new
sollten und stattdessen intelligente Zeiger und / oder die STL bevorzugen sollten; dies wird nur aus Neugier gefragt.) Warum erlaubt der C ++ - Standard diese implizite Umwandlung nicht? während der C-Standard tut?
sizeof(*a)
stattdessen verwenden.
malloc
es keinen Zeiger auf den zugewiesenen Typ zurückgeben kann. new
is C ++ gibt einen Zeiger auf den zugewiesenen Typ zurück, sodass ordnungsgemäß geschriebener C ++ - Code niemals void *
s zum Umwandeln hat.
void
, C nicht . Wenn das Schlüsselwort / Idee zu C hinzugefügt wurde, sie verändert es C Bedürfnissen gerecht zu werden . Das war kurz nach Zeigertypen gestartet geprüft werden überhaupt . Sehen Sie nach, ob Sie die K & R C-Beschreibungsbroschüre online oder eine Vintage-Kopie eines C-Programmiertexts wie C Primer von Waite Group finden . ANSI C war voll mit Features, die von C ++ zurückportiert oder inspiriert wurden, und K & R C war viel einfacher. Es ist also korrekter, dass C ++ C erweitert hat, wie es zu der Zeit existierte, und dass das C, das Sie kennen, von C ++ entfernt wurde.
long *a = malloc(sizeof(int));
Hoppla, jemand hat vergessen, nur einen Typ zu ändern!