I am not really religious about languages but a key criterion is memory management.
On an ARM, large platform, whatever, C++ is fine. OK, you also should use STL, it will
do a lot of dynamic memory juggling, but so what as long as you have enough space and time.
On small controllers like Arduino, IMHO, C++ is off target. With the very little RAM available,
you have to always know how much space you have, when its allocated and when its freed.
Better forget about any dynamic memory, avoid String classes, and whatever uses it. Little
stack space is OK, keep constants in code space, use global vars when needed, ...
all the dirty tricks. But, most important, there is no "out of memory" message in an Arduino.
When stack and heap (or even static memory) collide thats just a crash in the best case,
in the worst its unrepeatable errors. And you cannot debug that. IIRC there is not even an STL
on an Arduino (would probably need all RAM just for itself).