Не думаю, что оверхед от эксепшенов и shared_ptr
'ов в C++ намного больше, чем оверхед от аналогичных вещей в Си. Ведь "эксепшены" там можно частично имитировать через setjmp
/longjmp
и прочие прелести, а "shared_ptr" навелосипедить ручками, сделав структуру для хранения данных, указателя на функцию-делитер и атомарных счётчиков strong и weak ссылок, работа с которыми будет осуществляться через соответствующие функции из <stdatomic.h>
.
Ну и "weak_ptr" заодно заимплементить по аналогии с плюсовым, для полноты картины.
К чему я это всё?
Если Вам не нужен определённый функционал -- просто не используйте его.
И это утверждение справедливо вне зависимости от выбранного языка.
Если Вам не нужна некоторая часть языка -- это не причина отказываться от него полностью. Весь C++ на сто процентов, по-моему, не нужен вообще ни на одном проекте :)
А из фишек modern C++ в эмбеддеде наибольшую пользу, скорее всего, принесёт constexpr
. В сочетании с шаблонами поможет вынести в компайл-тайм много всего -- причём, в отличие от рекурсивной функциональщины, использующей только шаблоны, это будет смотреться читабельно. В C++11 constexpr
слабоват, но начиная с C++14 с ним есть где разогнаться.
Из структур данных в первую очередь посмотрите на array
и tuple
.
Для безопасности могут помочь enum class
и nullptr
.
Если в Вашем коде имеют место полиморфные иерархии, то override
сделает код понятнее и предотвратит неприятные ошибки с hiding'ом вместо переопределения.
Рекомендую посмотреть на ютубе лекции Jason'а Turner'а -- у него были видосики о применении современного C++ в эмбеддеде. Он показывал сгенерированный ассемблер -- отличий от аналогичного низкоуровневого сишного кода вообще не было. Зато в исходном коде типобезопасность и расширяемость, которых добиться одной чистой Сишкой не всегда возможно.
Думаю, с выходом новых стандартов C++ и появлением их поддержки в компиляторах этот язык должен набрать большую популярность в эмбеддеде.