W C nie ma potrzeby rzucania void *
żadnego innego wskaźnika, zawsze jest bezpiecznie promowany. Jednak w C ++ tak nie jest. Na przykład,
int *a = malloc(sizeof(int));
działa w C, ale nie w C ++. (Uwaga: Wiem, że nie powinieneś używać malloc
w C ++ ani w tym przypadkunew
, a zamiast tego powinieneś preferować inteligentne wskaźniki i / lub STL; jest to pytane wyłącznie z ciekawości) Dlaczego standard C ++ nie pozwala na taką niejawną obsadę, podczas gdy standard C robi?
sizeof(*a)
zamiast tego.
malloc
nie może zwrócić wskaźnika do przydzielonego typu. new
to C ++ zwraca wskaźnik do przydzielonego typu, więc poprawnie napisany kod C ++ nigdy nie będzie miał żadnych void *
rzutów.
void
, C nie . Kiedy to słowo / pomysł został dodany do C, to zmienił go do potrzeb użytkownika c. Było to krótko po tym, jak typy wskaźników zaczęły być w ogóle sprawdzane . Sprawdź, czy możesz znaleźć broszurę z opisem K&R C online, czy też starą kopię tekstu programowego C, takiego jak C Primer firmy Waite Group . ANSI C było pełne, funkcji wspieranych lub inspirowanych przez C ++, a K&R C był znacznie prostszy. Bardziej poprawne jest więc to, że C ++ rozszerzył C tak, jak istniał w tym czasie, a C, o którym wiesz, że zostało usunięte z C ++.
long *a = malloc(sizeof(int));
Ups, ktoś zapomniał zmienić tylko jeden typ!