Каковы причины кастинга пустого указателя?

Я изучаю C++ с нуля, и как таковой, у меня нет опытного понимания C. В C++ Вы не можете бросить пустой указатель на то, что, и я понимаю причины позади этого. Однако я знаю, что в C, Вы можете. Каковы возможные причины для этого? Просто кажется, что это быть огромной дырой в безопасности типов, которая (мне) походит на плохую вещь.

6
задан Maulrus 7 April 2010 в 06:00
поделиться

3 ответа

Вы можете преобразовать void * в другой указатель на обоих языках. Возможно, вы имели в виду неявно.

В C очень удобно не говорить об этом явно. В C ++ у нас есть шаблоны, поэтому для написания универсального кода нет необходимости в приведении типов void * и так далее. В C нет выбора. Универсальный контейнер должен содержать void * для объектов, и гораздо проще многократно сказать mydata * d = node; , тогда это будет mydata * d = (mydata *) узел; .

Так что все примерно так, как вы сказали. В целом безопасности типов C не уделялось столько внимания, как в C ++, особенно когда дело доходило до void * , потому что предполагалось, что это простой универсальный указатель на что угодно. В C ++ в этом нет необходимости, поэтому лучше сделайте это явным, когда вы имеете дело с этим.

13
ответ дан 8 December 2019 в 17:19
поделиться

Одна причина: если вы используете sort для сортировки массива структур и у вас есть функция сравнения для двух структур, вы вам нужно будет преобразовать указатели void в указатели на структуры для доступа к членам структуры.

0
ответ дан 8 December 2019 в 17:19
поделиться

Каковы возможные причины [приведения указателя void * в C]? Разве это не гигантская дыра в безопасности типов?

Это единственный возможный способ поддержки полиморфизма, также известного как универсальное программирование. Нет другого способа создать, например, общую хеш-таблицу. Полиморфизм в C в высшей степени небезопасен, но это единственный полиморфизм, который существует.

Радуйтесь, что C ++ имеет параметрический полиморфизм (одна из многих функций шаблонов).

1
ответ дан 8 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: