Почему C не упрощает типы возвращаемых массивов
Хотя языки программирования, такие как Java, допускают простые типы возвращаемых массивов, C требует более сложного подхода . Это не произвольно, а вытекает из фундаментальных решений проектирования языка.
Управление памятью и передача по значению в сравнении с передачей по ссылке
C различает передачу по значению и передаче по ссылке. Имена массивов по сути являются указателями. При передаче массива по значению вычисляется адрес памяти его первого элемента, который теряется за пределами области действия функции.
Контраст с Java
Java якобы использует передачу по -value, но он использует «умные» значения, которые часто являются адресами памяти. Удобные типы возврата массивов в Java достигаются за счет автоматического управления памятью и переноса указателей, что приводит к снижению эффективности.
Компромиссы C
C был создан с такой производительностью, как приоритет, жертвуя автоматическим управлением памятью ради скорости. Возврат массива C требует явного выделения памяти и обработки указателей, что отражает подход C.
Исключение класса шаблона
Классы шаблонов могут возвращать массивы, поскольку они используют классы. Однако возврат массива C по-прежнему требует ручного управления памятью.
Исторический контекст
Создатель C, Бьерн Страуструп, стремился сохранить производительность C, в то же время используя функции ООП из Симула. Решение ограничить автоматическое управление памятью было принято из соображений эффективности.
Поэтому, хотя C поддерживает возвращаемые типы массива, в нем приоритет отдается управлению памятью и скорости, а не удобству, в отличие от более упрощенного подхода Java.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3