C++ produces bloated code that runs slowly
An ex-colleage described C++ as a "stupidity amplifier", which hits the nail right on the head. Striving for simplicity is almost always the right approach - using C++ mustn't change that.
Like any programming language, the quality of the code is directly related to the skill of the programmer. Good (not excellent) C++ doesn't require any more skill than good 'C', but there is some knowledge that is required.
C++ is basically a superset of 'C', so when writting code that needs to be efficient, there is no excuse for it being less efficent than a 'C' implementation. However, the programmer needs to appreciate the implementation detail to achieve this, which many don't.
I'll try to add articles that outline techniques that are simple but useful.
C++ is good for OO, but we can't afford the bloat
OO is a powerful tool that must be used carefully, especially when efficency or memory use are important. Whilst you can use OO to model complex systems, you must consider carefully where to use each language feature. OO doesn't imply bloat any more than using macros or inline functions does.
However, as we'll see below, C++ isn't just about OO models of large systems. There are many useful features that can be used without adding OO to your system.
C++ is madness in embedded systems!
Many C++ programmers aren't good embedded programmers. This seems to be down to either not knowing about, or forgetting, what is important in an embedded system. Many get carried away with making their system OO and forget that effeciency (processor load or resource usage) is actually more important.
C++ allows code to be written more concisely and be more fault tolerant.
Useful Embedded C++Making use of constuction and destruction to create fault tolerant code.
Transparent handling of byte ordering, which avoids many potential errors.
Using different types of cast to indicate the your intent, allowing the compiler to catch some errors.