Я интересуюсь составлением списка функций C++, которые не желательны для использования во встроенных системах (и который может заставить людей рекомендовать c по C++). Попытайтесь добавить, почему, если Вы знаете, или добавляют Ваш почему к ответам других.
Вот один для запуска (единственный, который я знаю),
Определенным функциям требуется поддержка во время выполнения, поэтому, если вы пропустите необходимую поддержку, вам следует избегать этих функций. В частности, во время выполнения обычно требуются следующие функции:
Люди также обычно упоминают шаблоны, но они представляют собой только расширенные возможности макросов, поэтому вы можете свободно использовать их во встроенных системах. Тем не менее, вы можете избежать их, поскольку они могут привести к раздуванию кода после компиляции.
Ваша встраиваемая система должна поставляться с документацией, в которой указывается, какая поддержка времени выполнения для C ++ (и других) доступна, если таковая имеется.
Стандарты кодирования Joint Strike Fighter здесь: http://www2.research.att.com/~bs/JSF-AV-rules.pdf довольно хороши. обзор использования C ++ для встроенного программирования.
Запрет на динамический полиморфизм является пережитком 90-х годов и не имеет рациональной основы. Вызов виртуальной функции занимает не больше времени, чем переключение и вызов. Если вы собираетесь избегать вызовов виртуальных функций, вы также можете использовать C.
Вы должны выбирать функции в зависимости от вашего устройства. Это может быть разумно для какой-то функции, а может и нет. Это зависит от его архитектуры. Например, у Google есть сокращенная версия компилятора C ++ для платформы Android. Простое общее правило - избегать конструкций, которые приведут к тяжелому коду времени выполнения.
T
, создание экземпляра с помощью int
в большинстве случаев будет идентично созданию экземпляра с помощью long
). dynamic_cast
может быть довольно затратным с точки зрения ЦП, потому что ему необходимо сканировать иерархию классов и выполнять строковое сравнение имен классов [необходима цитата].