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ć mallocw 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.
mallocnie może zwrócić wskaźnika do przydzielonego typu. newto 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!