Coming этой страницы конца, сам вопрос был дан ответ Крис Stratton, но очень важно, чтобы исправить несколько вещей Крис Беке положить здесь общие заблуждения с людьми, которые не знакомы с C++:
- C++ не создает неявный код или данные, только то, что вы запрашиваете. Даже для среднего программиста на C++ не будет никакого дополнительного кода или данных. Я узнал это через знание Asm за C++, но просто прочитал книги Скотта Мейерса, это достаточно хорошо.
- Не исключены исключения только на C++, их весь код может быть исключен из привязки для большинства инструментов. Это действительно делается в приложениях RT.
Речь идет о неправильных представлениях, размещенных здесь. Однако, чтобы добавить еще:
1) Новичок программист на C++ может делать глупости, но начинающий программист C, пытающийся реализовать сам по себе полиморфизм и наследование, как это делается снова и снова в ядре, просто не называя его как таковое, будет делать много более неэффективной неразборчивой ерунды.
2) Сказать, что единственное, что может быть создано в базе C++, - это виртуальный указатель, если вам это нужно и укажите «виртуальный», а затем также программисты C обычно просто создают такой указатель, манипулируя им самим, добавляя lookup из-за этого они получают гораздо более сложные ошибки. Как всегда в C++, если вы не укажете «виртуальный», то вы даже не получите этот указатель. Наследование и инкапсуляция, конечно, полностью свободны от накладных расходов.
3) C++ создает такое же количество ассемблера и память, как C, если вы не ЯВНО запросить специальные функции, но есть общий случай, когда C++ является более эффективным - при прохождении указателей на функцию. Если вы используете функторы C++, вы можете встроить заостренную функцию. Это особенно полезно во встроенных приложениях.
4) Если встроенный RT использует C++, почему Linux не работает? Просто из-за мифов, поэтому, пожалуйста, внимательно прочитайте это сообщение и обратитесь к scott meyers или еще лучше к asm. Я 20 лет в РТ и испытываю такое же недоверие к C++, когда я переключаюсь 14 лет назад, но факты не подтверждают такого недоверия.
TL; DR - очень легко написать эффективный и в общем случае более эффективный код на C++, исследования, много опыта работы в отрасли и книг изобилуют этой проблемой.
Если вы нацелены на включение mainline, C++ - самый надежный способ игнорировать ваш патч. – SingleNegationElimination 2010-12-07 07:01:23